home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-04-01 | 185.1 KB | 5,267 lines |
-
-
-
-
- BE, Inc.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- T i m e S t a c k (TM)
-
- Version 1.10
-
-
-
-
- The Ultimate Software Timing and Stack Analysis Utility
-
-
-
-
-
-
-
-
- April 1, 1993
-
-
-
-
-
-
- _______
- ____|__ | (R)
- --| | |-------------------
- | ____|__ | Association of
- | | |_| Shareware
- |__| o | Professionals
- -----| | |---------------------
- |___|___| MEMBER
-
-
-
-
-
- "We provide answers you never had before"
-
-
-
-
- TimeStack User's Guide
- Copyright 1993 by BE, Inc.
- All Rights Reserved
-
-
- The information in this document is subject to change without
- notice and does not represent a commitment on the part of BE,
- Inc.
-
-
-
- BE, INC. MAKES NO WARRANTY OF ANY KIND WITH REGARD TO THIS
- MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. BE, INC.
- SHALL NOT BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR INCIDENTAL
- OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH THE PERFORMANCE OF
- SERVICES USING THIS MATERIAL. THE ENTIRE RISK AS TO THE QUALITY
- AND PERFORMANCE OF THE SOFTWARE IS WITH THE USER., INCLUDING BUT
- NOT LIMITED TO LOSS OF PROFIT, AND SPECIAL, INCIDENTAL,
- CONSEQUENTIAL, OR OTHER SIMILAR CLAIMS.
-
-
-
- U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND. Use, duplication, or
- disclosure by the Government is subject to restrictions as set
- forth in subparagraph (c)(1)(ii) of the Rights in Technical Data
- and Computer Software clause at DFARS 252.227-7013.
-
-
-
- All BE, Inc. products are trademarks or registered trademarks of
- BE, Inc. Other brand and product names are trademarks or
- registered trademarks of their respective holders.
-
-
-
-
-
- BE, Inc.
- P.O. Box 29419
- Indianapolis, IN 46229-0419 TimeStack User's Guide Table Of Contents
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Table Of Contents
-
-
-
-
-
-
-
- Table Of Contents i
-
- Introduction 1
- Welcome to TimeStack.......................................1
- What Is TimeStack..........................................1
- Why TimeStack Is Unique....................................2
- What TimeStack Does Not Do.................................2
- The User's Guide...........................................2
- Definition Of Shareware....................................3
- The Association of Shareware Professionals (ASP)...........4
- Registration Information...................................4
- How To Contact BE, Inc.....................................5
-
- Chapter One - Starting Up 6
- System Requirements........................................6
- Installation...............................................6
- Configuring AUTOEXEC.BAT..............................7
- Command Line Syntax........................................7
- Loading and Running TimeStack..............................8
-
- Chapter Two - Menus and Windows 9
- Screen Layout..............................................9
- Menus.....................................................10
- How the menu works...................................10
- Status line..........................................11
- Entering filenames or text...........................11
- Entering numbers and addresses.......................12
- Menu Selections...........................................13
- File.................................................13
- Load............................................13
- Restore.........................................13
-
-
-
- i TimeStack User's Guide Table Of Contents
-
-
-
- Save............................................13
- Get.............................................14
- Put.............................................14
- Analysis.............................................14
- Edit.................................................15
- Conditional branches............................15
- Jump to subroutine..............................15
- Jump indirect...................................16
- Clear................................................16
- Disasm...............................................16
- Options..............................................16
- Type of processor...............................16
- Clock rate......................................16
- Divisor for clock...............................17
- Get.............................................17
- 1. Config.......................................17
- 2. Node.........................................17
- Print................................................17
- Comment.........................................18
- 1. Path to File.................................18
- 2. Disasm to File...............................18
- 3. Path to Printer..............................18
- 4. Disasm to Printer............................18
- Quit.................................................19
- Windows...................................................19
- Selecting a window...................................19
- Moving and sizing a window...........................19
- Display of subroutines...............................20
- Windows Displayed.........................................20
- 1 - Special Nodes....................................20
- 2 - Disassembly......................................20
- 3 - Analysis Results.................................21
- 4 - Maximum Execution................................21
- 5 - Minimum Execution................................22
- 6 - Stack Depth......................................22
- Special Keys..............................................22
- Function keys........................................22
- Hot keys.............................................23
- Other keys...........................................23
- On-Line Help..............................................24
-
- Chapter Three - Understanding TimeStack 25
- Assembly Language Formats.................................25
- Differences in mnemonics.............................26
- Demo program limitations.............................27
- Hex Files.................................................27
- Motorola hex files...................................28
- Intel hex files......................................28
- Possible errors......................................29
- Program Listings..........................................29
- Configuration Files.......................................29
-
-
-
- ii TimeStack User's Guide Table Of Contents
-
-
-
- Node Files................................................30
- Temporary Files...........................................30
- Start and Stop Addresses..................................30
- Timing Concepts...........................................31
- Conditional Branches......................................31
- Take.................................................31
- Fall.................................................32
- Normal...............................................32
- Program Loops.............................................32
- Subroutines...............................................34
- Jump Indirect.............................................35
- Stack Depth...............................................35
-
- Chapter Four - Tutorial 36
- Look at Listing...........................................36
- Invoking Program..........................................36
- Configuring TimeStack.....................................37
- Load the Hex File.........................................37
- Timing Subroutines........................................38
- Timing Subroutines with Conditional Branches..............39
- Timing Loops..............................................41
- Simple loop..........................................41
- Loop with middle exit................................42
- Printing the Results......................................43
- Quitting the Program......................................44
-
- Chapter Five - Timing Strategies 45
- Have a Listing Ready......................................45
- What Units to Use.........................................45
- Start Small...............................................45
- Be Realistic..............................................46
- More Than One Path........................................47
-
- Chapter Six - Advanced Tutorial 48
- Invoke Program Again......................................48
- Complex Loops.............................................48
- Indirect Jump.............................................50
- Untimeable Instructions...................................51
- Illegal Instructions......................................51
- Nested Loops..............................................52
- Loops inside subroutines.............................52
- Loops inside other loops.............................54
- Subroutines with Different Execution Times................55
- Stack Imbalance...........................................56
- Infinite Loops............................................57
- Memory limitations...................................58
- Branch Past Stop Address..................................58
- Actual Stop Address.......................................59
- Forcing Conditional Branches..............................60
- Save to File..............................................60
- High Level Languages......................................60
-
-
-
- iii TimeStack User's Guide Table Of Contents
-
-
-
- Appendix A - Listing of Demo Program 61
-
- Appendix B - Warning and Error Messages 69
- Warning Messages..........................................69
- Error Messages............................................70
-
- Appendix C - Key Summary 74
-
- Appendix D - Processor Specifics 76
- TSDEMO....................................................76
- TS6811....................................................77
- TS6805....................................................78
- TS8051....................................................79
- TS8048....................................................80
-
- Index 81
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- iv TimeStack User's Guide Introduction
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Introduction
-
-
-
-
-
-
-
-
- Welcome to TimeStack
-
- Thank you for your purchase of TimeStack. Your days of
- counting opcode cycles and looking for instructions
- that push data on the stack are over. You will now be
- able to quickly document exactly how long an assembly
- language function takes to execute, find its worst
- stack depth usage, and check for stack imbalances!
-
-
- What Is TimeStack
-
- TimeStack is a better way to time and analyze your
- real-time assembly language programs.
-
- It is beneficial in real-time assembly language
- programs to know four things.
-
- * The absolute theoretical maximum execution time,
-
- * minimum execution time,
-
- * worst stack depth, and
-
- * stack imbalances.
-
- It is also beneficial to see how these paths were
- achieved. This allows proving that a program will
- execute within its limitations. TimeStack gives you
- this information.
-
-
-
- 1 TimeStack User's Guide Introduction
-
-
-
- Why TimeStack Is Unique
-
- Until now, execution time and stack depth had to be
- calculated by hand. TimeStack eliminates this drudgery.
-
- Using a simulator to verify timing is much harder than
- using it to do a functional test of a program. It is a
- long and tedious task to configure the inputs of a
- simulator to time the path that is thought to be the
- longest executing. TimeStack is better than a simulator
- for timings because all possible combinations of
- branches are examined.
-
- Some of the features that make TimeStack easy to use
- are pull down menus, hot keys, and multiple windows for
- display of information.
-
- It includes the ability to disassemble, send the
- results of the analysis to a printer or file, and save
- its current configuration.
-
-
- What TimeStack Does Not Do
-
- TimeStack is not a simulator. If the program contains a
- loop, the user will need to assist TimeStack by
- indicating how many times the loop takes place. It does
- not know what has been loaded into processor registers.
- If a portion of the logic has special considerations
- based on a register or flag value (loop counters,
- indirect jumps, etc.,) they must be specified by the
- user.
-
-
- The User's Guide
-
- The User's Guide provides all of the information about
- TimeStack as well as examples.
-
- Chapter One - Starting Up tells you how to install
- TimeStack on your system.
-
- Chapter Two - Menus and Windows describes the screen
- layout and how to work the menu system.
-
- Chapter Three - Understanding TimeStack goes into some
- background on what TimeStack needs to run and concepts
- involved with timing a program.
-
-
-
-
-
-
- 2 TimeStack User's Guide Introduction
-
-
-
- Chapter Four - Tutorial is an actual demonstration of
- how to analyze a simple program. Many of the concepts
- are shown.
-
- Chapter Five - Timing Strategies discusses some of the
- things to keep in mind while timing.
-
- Chapter Six - Advanced Tutorial expands on the
- demonstration by addressing more advanced topics.
-
- Appendix A - Listing of Demo Program is the complete
- listing of the demonstration program used in the
- examples.
-
- Appendix B - Warning and Error Messages lists and
- explains all warning and error messages that may be
- encountered, and suggests possible solutions.
-
- Appendix C - Key Summary is a convenient reference for
- all function keys and hot keys.
-
- Appendix D - Processor Specifics describes any special
- characteristics an individual processor may have.
-
-
- Definition Of Shareware
-
- TimeStack is a copyrighted program which is being
- marketed as shareware. It is not a public domain
- program and it is not free.
-
- Shareware is a distribution method, not a type of
- software. The shareware system makes fitting your needs
- easier, because you can try before you buy. Shareware
- has the ultimate money-back guarantee - if you don't
- use the product, you don't pay for it.
-
- Copyright laws apply to both shareware and commercial
- software, and the copyright holder retains all rights,
- with a few specific exceptions as stated later.
- Shareware authors are accomplished programmers and the
- programs are comparable in quality to commercial
- software (in both cases, there are good programs and
- bad ones). The main difference is in the method of
- distribution. The author specifically grants the right
- to copy and distribute the software, either to all and
- sundry or to a specific group. For example, some
- authors require written permission before a commercial
- disk vendor may copy their shareware.
-
-
-
-
-
- 3 TimeStack User's Guide Introduction
-
-
-
- The Association of Shareware Professionals (ASP)
-
- The ASP is an association for shareware authors with
- the general goals of educating shareware authors and
- distributors and the public, setting standards, sharing
- resources and information among members.
-
- Shareware produced by ASP members must meet minimum
- quality standards. The program must be fully
- functional, not crippled, a demo, or out-of-date
- version. The documentation must be complete and clearly
- state the registration fee and the benefits of
- registering. ASP members must provide free mail or
- telephone support for a minimum of three months after
- registration. Also, members must follow other
- guidelines to insure that a user is dealt with
- professionally.
-
- BE, Inc. is a member of the Association of Shareware
- Professionals (ASP). ASP wants to make sure that the
- shareware principle works for you. If you are unable to
- resolve a shareware-related problem with an ASP member
- by contacting the member directly, ASP may be able to
- help. The ASP Ombudsman can help you resolve a dispute
- or problem with an ASP member, but does not provide
- technical support for members' products. Please write
- to the ASP Ombudsman at 545 Grover Road, Muskegon, MI
- 49442 or send a CompuServe message via CompuServe Mail
- to ASP Ombudsman 70007,3536.
-
-
- Registration Information
-
- TimeStack is provided at no charge to the user for
- evaluation. Feel free to share it with your friends,
- but do not give it away altered or as part of another
- system. The essence of "user-supported" software is to
- provide personal computer users with quality software
- without high prices, and yet to provide incentive for
- programmers to continue to develop new products.
-
- BE, Inc. grants you a limited license to use TimeStack
- for evaluation purposes only for a period not to exceed
- 30 days. If you intend to continue using TimeStack or
- its documentation after the 30-day evaluation period,
- you MUST make a registration payment to BE, Inc. Using
- TimeStack after the evaluation period has ended without
- registering is a violation of this limited license.
-
- TimeStack may be registered by using the accompanying
- order form. You may also register using MasterCard or
-
-
-
- 4 TimeStack User's Guide Introduction
-
-
-
- Visa by phone (1-800-628-9085). Site licenses and
- volume discount arrangements may be made by contacting
- BE, Inc. Company purchase orders are welcomed.
-
- The $129.95 registration fee will license one copy for
- use on any one computer at any one time. Additional
- sites or additional computers on a local area network
- must be licensed separately. If you have any questions
- please contact BE, Inc.
-
- Registered users will receive:
-
- * The complete TimeStack package including typeset
- manual.
-
- * The most current version of TimeStack. BE, Inc. is
- continuously improving its products and registration
- ensures that you have the latest version.
-
- * Free technical support.
-
- * Notification of significant upgrades to TimeStack.
-
-
- How To Contact BE, Inc.
-
- When you register your software, you allow us to give
- you the kind of support you deserve. You may contact us
- by mail, by telephone, or on CompuServe.
-
- BE, Inc.
- P.O. Box 29419
- Indianapolis, IN 46229-0419
- (317) 894-7021
- 1-800-628-9085 (orders only)
-
- CompuServe [70353,2665]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5 TimeStack User's Guide Chapter One - Starting Up
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter One - Starting Up
-
-
-
-
-
-
-
-
- System Requirements
-
- TimeStack requires the following system configuration:
-
- * IBM Personal Computer or a compatible,
-
- * at least 512K of RAM,
-
- * DOS Version 2.1 or greater,
-
- * a hard disk drive or floppy disk drive, and
-
- * IBM PC compatible video adapter.
-
- For fastest operation, a computer of at least an IBM-AT
- class machine is preferred. Of course, TimeStack will
- work with lesser models, but with a degradation in
- operating speed.
-
-
- Installation
-
- Before you install TimeStack, please read the
- information in the README file. The README file
- contains any last minute information that is not
- contained in this manual.
-
- Installation is fairly simple. All of the files on the
- TimeStack Program disk(s) are copied to a subdirectory
- on a hard disk or copied to a separate floppy disk.
-
-
-
- 6 TimeStack User's Guide Chapter One - Starting Up
-
-
-
- * Prepare the destination that is to receive the
- TimeStack files. This could be another floppy disk
- or a subdirectory on the hard disk.
-
- * Insert the TimeStack Program disk to be installed
- into the floppy disk drive.
-
- * Copy all the files from the TimeStack Program disk
- to the desired destination. The commands usually
- look like this:
-
- MD C:\TS
- COPY A:*.* C:\TS
-
- * Do this for each disk that is to be installed. The
- TimeStack files are not sensitive to the directory
- that they are placed.
-
-
- Configuring AUTOEXEC.BAT
-
- At the end of installation, you may find it convenient
- to have DOS automatically search the directory that
- contains the TimeStack files. DOS searches for a file
- called AUTOEXEC.BAT when you start your computer. It
- performs any commands that you might place in it.
-
- One useful command is PATH. It tells DOS which
- directories to search for executable commands after it
- has searched the current working directory. The command
- to have it search the TimeStack directory just created
- might look something like this:
-
- PATH C:\TS
-
- If there are other directories already specified in the
- PATH command, the TimeStack directory should be placed
- at the end. A semicolon separates each directory
- specified in the list:
-
- PATH C:\DOS;C:\BIN;C:\TS
-
-
- Command Line Syntax
-
- The name of the executable program that is typed at the
- command line is different for each family of
- processors. The generic command-line syntax for running
- TimeStack is:
-
- TSxxxx
-
-
-
- 7 TimeStack User's Guide Chapter One - Starting Up
-
-
-
- where xxxx is the name of the processor family.
- Currently, the valid program names are:
-
- * TSDEMO Demonstration program
-
- * TS6811 Motorola 6800/1/2/3 and 68HC11 families
-
- * TS6805 Motorola 6805 HMOS, HCMOS, and CMOS families
-
- * TS8051 Intel 8051 families
-
- * TS8048 Intel 8020/1 and 8048 families
-
-
- Loading and Running TimeStack
-
- If you are using a hard disk system, change to the
- directory where the TimeStack files are located. Type
- the program name at the DOS prompt and press Enter.
-
- If you are operating from a floppy system, place the
- TimeStack disk in the drive, change the current default
- drive to that drive, type the program name, and press
- Enter.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter Two - Menus and Windows
-
-
-
-
-
-
-
-
- Screen Layout
-
- The screen as displayed in its default configuration
- has two major parts. The single line at the top is the
- main menu command bar. It is used to select the many
- different functions and includes a one-line help
- message about the currently selected item in a status
- line at the bottom. The rest of the screen contains the
- display windows with analysis information (see Figure
- 2-1).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 9 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
-
-
- File Analysis Edit Clear Disasm Options Print Quit
- ____+----------------------------+________+------- 3 - Analysis Results -------+
- ____| Start address : 002F |________| 68DEMO at 1 MHz / 4 |
- ____| Stop address : FFFF |________| 002F to 0043 Bytes 21 |
- ____+----------------------------+________| Stack now -2 max 0 |
- +---------- 1 - Special Nodes -----------+| Cycle min 16 max 26 |
- | No special nodes || 64.0 us 104.0 us |
- | || |
- | |+------------------------------------+
- | |+------ 4 - Maximum Execution -------+
- | || 1) 0030 : BCC 0038 FALL |
- | || 2) 0036 : BCC 003D TAKE |
- | || 3) 003E : BCC 0043 FALL |
- | |+------------------------------------+
- +----------------------------------------++------ 5 - Minimum Execution -------+
- +----------- 2 - Disassembly ------------+| 1) 0030 : BCC 0038 TAKE |
- | No Disasm address entered || |
- | || |
- | |+------------------------------------+
- | |+--------- 6 - Stack Depth ----------+
- | || 1) 0030 : BCC 0038 FALL |
- | || 2) 0036 : BCC 003D FALL |
- | || |
- +----------------------------------------++------------------------------------+
- Analyze program from start to stop address
-
- Figure 2-1 Typical screen
-
-
- Menus
-
- The pull down menus are selected by using the cursor
- keys and pressing Enter. Another method is to press the
- first letter of the menu description.
-
-
- How the menu works
-
- The TimeStack menu operates very much like most other
- popular menus.
-
- Pressing Esc aborts the current operation and backs up
- one level in the menu. Thus, pressing Esc a multiple
- number of times will eventually return the cursor to
- the main menu.
-
- The left and right arrow keys are used to move the
- highlight bar back and forth along the menu line.
-
-
-
-
- 10 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- Pressing Enter selects the menu item and pulls down the
- next menu or invokes whatever action should take place.
-
- On the pull down menus, pressing the up and down arrow
- keys moves the highlight bar through the selections.
- Pressing Enter selects the menu item or invokes
- whatever action should take place.
-
- The first letter of the menu item name may be pressed
- to select the menu item. Some menu items may be
- selected with a hot key which is described in Special
- Keys.
-
-
- Status line
-
- The status line is located at the bottom of the screen.
- It is a single line that displays a simple description
- about the currently selected menu item. For further
- information on the current menu item, press F1 for
- help.
-
-
- Entering filenames or text
-
- Filenames and text are entered in many different
- places. Both are entered using the same basic
- mechanism.
-
- A prompt for a filename or text places a box on the
- screen just below the menu item that was picked to
- request the information. This box contains a
- description of what type of information should be
- entered. Below the description line is the line on
- which the information will be entered. This line will
- either start off empty or contain whatever information
- has previously been entered for that item.
-
- If there was text that was previously entered and it is
- displayed, the cursor will be positioned at the end of
- it. The first keypress is very important. Pressing any
- alphanumerical key will clear this text and start a new
- entry with that key. Pressing any type of cursor
- movement key such as Home, End, Cur Left, Cur Right,
- Backspace, or Del will immediately start to edit the
- existing text.
-
- If Esc is pressed before Enter is pressed, the original
- text is not changed. The Esc key is sort of an "oh-no"
- key. It lets you back out of a mistake before it's too
- late.
-
-
-
- 11 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- Entering numbers and addresses
-
- Numbers are entered the same way that text is entered.
- Any previously entered number is displayed and a new
- number may be typed in immediately or the old number
- may be edited. If Esc is pressed before Enter is
- pressed, the original number is not changed.
-
- All numbers that are entered must fall in a certain
- range. If the new number that is entered falls outside
- of this range when Enter is pressed, the number just
- entered is erased and the old number is redisplayed.
- This is typically used to limit that maximum value that
- may be entered.
-
- Information that requires a number to be entered will
- default to either decimal or hexadecimal without
- requiring any prefix or postfix characters. The default
- is logical for the value to be entered. Values that
- represent counts or number of times to do something are
- decimal numbers. Addresses are in hexadecimal.
-
- Upper and lower case is not significant when entering a
- number. This is only relevant for hexadecimal numbers
- and prefix or postfix characters.
-
- The default number base may be overridden by using a
- prefix or postfix. The two different prefixes that may
- be used to force a decimal number base are:
-
- * & &123
-
- * d' d'123 or D'123
-
- The five different prefixes that may be used to force a
- hexadecimal number base are:
-
- * $ $ABCD
-
- * 0x 0xABCD or 0XABCD
-
- * h' h'ABCD or H'ABCD
-
- * x' x'ABCD or X'ABCD
-
- * 0x' 0x'ABCD or 0X'ABCD
-
- The postfix that may be used to force a hexadecimal
- number base is:
-
- * h ABCDh or ABCDH
-
-
-
- 12 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- Menu Selections
-
- This section provides a reference to each menu item and
- prompt. It is arranged in the order that the menus
- appear on the screen.
-
-
- File
-
- ALT-F The File menu lets you manipulate all files in
- TimeStack. This includes loading the hex file, saving
- and restoring the node list, and getting and putting
- the configuration to disk.
-
- Load
-
- ALT-L This prompts the name of the hex file. The hex file is
- given a default extension of .HEX if no extension is
- entered. If an extension is not desired then enter the
- name as NAME. with a period on the end.
-
- The hex file may be Motorola or Intel hex format. For a
- more complete discussion see the section titled Hex
- Files.
-
- The hex file is automatically loaded if a configuration
- file is loaded and there is a hex file name specified
- in its configuration.
-
- Restore
-
- ALT-R The node list file name is entered here. This name is
- used to read in the special node list file. Any name
- entered here will also be used by the menu File | Save
- described next.
-
- The node list file is given a default extension of .NOD
- if no extension is entered. If an extension is not
- desired then enter the name as NAME. with a period on
- the end.
-
- The node list file is automatically loaded if a
- configuration file is loaded and there is a node list
- file name specified.
-
- Save
-
- ALT-S This name is used to write out the special node list
- file. The node list file name entered here is the same
- name used in the menu File | Restore described above.
-
-
-
-
- 13 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- The node list file is given a default extension of .NOD
- if no extension is entered. If an extension is not
- desired then enter the name as NAME. with a period on
- the end.
-
- The node list file is automatically saved if the
- automatic node list file save feature is active in the
- Options | 2. Node menu and there is a node list file
- name specified.
-
- Get
-
- The configuration of TimeStack is read in from here.
- Any name entered here will also be used by the menu
- File | Put described next.
-
- The configuration file is given a default extension of
- .CFG if no extension is entered. If an extension is not
- desired then enter the name as NAME. with a period on
- the end.
-
- If a configuration file that matches the name of the
- program (i.e. TSDEMO.CFG for the demo program) is found
- when TimeStack starts up, that configuration is
- automatically loaded.
-
- Put
-
- The current TimeStack configuration is saved in this
- file. The configuration file name entered here is the
- same name used in the menu File | Get described above.
-
- The configuration file is given a default extension of
- .CFG if no extension is entered. If an extension is not
- desired then enter the name as NAME. with a period on
- the end.
-
- The configuration is automatically saved if the
- automatic configuration save feature is active in the
- Options | 1. Config menu and there is a configuration
- file name specified.
-
-
- Analysis
-
- ALT-A The start and stop addresses of the analysis to be done
- are entered here. The cursor starts out on the top line
- which is the start address. The hexadecimal start
- address obtained from the program listing is entered
- here.
-
-
-
-
- 14 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- Pressing Enter moves to the stop address on the next
- line. A hexadecimal stop address determined by
- inspecting the program listing is entered. If the
- analysis is on a procedure that finishes with a return
- from subroutine instruction, enter a hexadecimal value
- that contains all F's such as FFFF. The analysis will
- automatically stop when it finds a return from
- subroutine instruction. Pressing Esc from this line
- restores the previous value and moves the cursor back
- up to the start address line.
-
- Once the analysis has started, it may be aborted by
- pressing Esc. This causes a prompt to appear that asks
- if you really want to abort.
-
-
- Edit
-
- ALT-E A prompt for the address of an instruction to be edited
- is given.
-
- The instructions that may be edited are conditional
- branches, jumps to subroutines, jumps indirect, and
- jumps to subroutines indirect. The type of instruction
- will determine which menu is displayed next.
-
- Conditional branches
-
- The menu for conditional branches have the choices
- Take, Fall, Normal, or Delete. The options Take and
- Fall will prompt for a number that indicates how many
- times to take or fall through a conditional branch. A
- value of zero indicates that the branch should always
- be taken or always fall through.
-
- Jump to subroutine
-
- The menu for jumps to subroutines and jumps to
- subroutines indirect allow the maximum number of cycles
- and maximum stack depth to be entered. The maximum
- number of cycles will also be used for the minimum
- number of cycles in the analysis and the outcome in the
- Analysis Result window will be flagged to indicate the
- minimum number of cycles and worst case stack depth may
- not be accurate.
-
- The largest value that may be entered for the maximum
- number of cycles on a jump to subroutine is 65535. If
- this proves to be a limitation it may be possible to
- set its value to zero during the analysis and add the
- desired maximum number to the result afterwards.
-
-
-
- 15 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- Jump indirect
-
- The menu for jump indirect first displays the option to
- handle the jump indirect exactly as it would a return
- from subroutine instruction. If this is not chosen then
- the address that should be jumped to is prompted for.
-
-
- Clear
-
- ALT-C It is possible to clear nodes in the Special Nodes
- window one at a time using the Edit menu but this is
- time consuming. This option allows clearing all nodes
- from the given starting address through the given
- ending address inclusive.
-
-
- Disasm
-
- ALT-D The Disassembly window needs to know where to start
- when it disassembles a portion of the program. Enter
- the starting address for disassembly here.
-
-
- Options
-
- ALT-O There are many different options available so that you
- may customize your operation of TimeStack.
-
- Type of processor
-
- The type of processor is picked in this menu. This can
- have an effect on what opcodes are illegal and how many
- clock cycles an opcode uses. Some processor families
- have a large number of choices. This may mean a
- difference in timing characteristics or it may just
- allow the specific processor name to be chosen for
- display purposes. Appendix D will indicate the reason.
-
- Any time a processor is picked, the clock divisor value
- is reset to a default value for that processor. See
- the Options | Divisor menu.
-
- Clock rate
-
- The clock rate of the processor is entered here. This
- is used to calculate how many microseconds the maximum
- and minimum execution times are in the Analysis Results
- window.
-
-
-
-
-
- 16 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- The number entered is in megahertz. It must be between
- 0 and 200 MHz. It is a floating point number with at
- least five digits of accuracy. It may be entered as a
- regular number or using scientific notation.
-
- Divisor for clock
-
- Every processor has a factor that the external clock
- input is divided by. The external clock is divided by
- this value to obtain an internal clock that is referred
- to as the cycle time.
-
- Most processors have a fixed value for this internal
- divisor and this may be found in Appendix D. This
- default value may be changed using this menu. Normally
- this would only be done if the processor has a special
- customized selection for different divisors.
-
- This value is reset to a default value any time a
- processor is selected using the Options | Type menu.
-
- The number entered must be between 0 and 256. It is a
- floating point number with at least five digits of
- accuracy. It may be entered as a regular number or
- using scientific notation.
-
- Get
-
- You may get additional information on the current state
- of TimeStack. This includes file names, current
- processor type, clock rate, clock divisor, and memory
- available.
-
- 1. Config
-
- This option allows the configuration to be saved
- automatically when the Quit menu is invoked.
-
- 2. Node
-
- This option allows the node list to be saved
- automatically when the Quit menu is invoked.
-
-
- Print
-
- ALT-P The information obtained from the analysis may be saved
- in a file on disk or sent to a printer.
-
-
-
-
-
-
- 17 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- Comment
-
- A line at the top of the printed information may
- optionally contain a comment. That line is entered here
- and it remains until replaced with another line.
-
- 1. Path to File
-
- Outputs the current analysis results, maximum
- execution, minimum execution, and stack depth paths to
- a file. This file is usually saved for printing later.
-
- 2. Disasm to File
-
- Outputs the disassembled program to a file that is
- usually saved for printing later. The range that is
- disassembled begins at the analysis start address and
- finishes at the analysis end address.
-
- 3. Path to Printer
-
- Same as Print | 1. Path to File except the output is
- directed to the DOS print device PRN.
-
- Before the printing starts, a message is displayed that
- says to prepare the printer. When the printer is ready
- press Enter.
-
- To abort the print before it begins press Esc.
-
- When Enter is pressed another message is displayed that
- indicates printing is in progress. Esc may also be
- pressed at any time to halt the printing.
-
- A warning is displayed if a problem is encountered
- communicating with the printer. Typically this is some
- simple condition such as turning the printer on,
- checking to see that it has paper, and that it is on-
- line. Press Enter to try again after the problem has
- been fixed. Printing may also be aborted at this point
- by pressing Esc.
-
- 4. Disasm to Printer
-
- Same as Print | 2. Disasm to File except the output is
- directed to the DOS print device PRN.
-
- The printer operation is the same as 3. Path to
- Printer.
-
-
-
-
-
- 18 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- Quit
-
- ALT-Q Quit the TimeStack program. If the Special Nodes have
- been modified in any way and the save special nodes
- automatically feature is not active, a prompt is given
- to ask if the information should really be saved.
-
-
- Windows
-
- The majority of the screen contains six windows. These
- windows display a variety of information about the
- analysis. One displays the results of the most recent
- analysis. Other windows show the paths that were taken
- to achieve those results. Another window contains a
- list of all nodes that have been programmed and the
- last displays the disassembled program.
-
-
- Selecting a window
-
- Each of the six individual windows may be selected at
- any time. A selected window has a border with two lines
- around it. All other windows have a single line. In
- Figure 2-1 on page 10, window 1 - Special Nodes is
- currently selected.
-
- To select another window, press F3, F4, or ALT-1
- through ALT-6. The key F3 makes the next window active,
- F4 makes the previous window active, and ALT-1 through
- ALT-6 selects the corresponding window by its number
- directly.
-
- Some windows selected may be able to scroll using the
- cursor keys. See the specific description of the
- windows below.
-
-
- Moving and sizing a window
-
- To move or size a window, press F6. This activates a
- mode that allows the window to be moved or sized using
- the Cur Up and Cur Dn keys. Pressing End toggles into
- and out of a mode that allows changing the size of a
- window. Press End once to enter the change size mode.
- Use the Cur Up and Cur Dn keys to move the lower right
- hand corner of the window to make it the desired size.
- Press End to toggle back into the move window mode or
- press F6 when the window is in the location and size
- desired.
-
-
-
-
- 19 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- Display of subroutines
-
- Conditional branches inside of subroutines called with
- a jump subroutine instruction are not displayed to
- avoid clutter. If the branching information for a
- subroutine is desired then the subroutine may be
- analyzed separately.
-
-
- Windows Displayed
-
- These are the windows that may be displayed.
-
-
- 1 - Special Nodes
-
- This window displays the current list of special nodes.
- A node is a conditional branch, a subroutine call, or a
- jump, branch or subroutine call that uses an indirect
- addressing mode.
-
- Each entry in the list of special nodes displays its
- position in the list, the address where it is located,
- the disassembled mnemonic, and any special settings it
- may have such as TAKE or FALL.
-
- This information may be saved and restored from the
- menu File | Save and File | Restore.
-
- The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
- Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
- as described in Special Keys when this window is
- selected.
-
-
- 2 - Disassembly
-
- This window displays a disassembled portion of the
- currently loaded program starting at the given address.
-
- It is not possible to page in front of the address
- entered to begin disassembly. This is because it is
- impossible to figure out where opcode boundaries are
- when moving backwards.
-
- The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
- Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
- as described in Special Keys when this window is
- selected.
-
-
-
-
-
- 20 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- If the window is made wider it is possible to see
- additional information about each instruction. There
- are three columns that contain the following
- information in this order:
-
- * number of bytes,
-
- * number of cycles, and
-
- * amount of stack used.
-
-
- 3 - Analysis Results
-
- The Analysis Results window shows the results from the
- most recent analysis that has been run. It displays the
- start address entered. The stop address displayed is
- either the one entered or the one found.
-
- The number of bytes is useful for quickly determining
- the size of a procedure. The number of bytes is
- calculated as:
-
- Stop address - Start address + opcode size at Stop
- address
-
- The maximum and minimum cycle time differences are
- caused by conditional branches. The minimum cycle time
- is flagged with a + if any conditional branches that
- are forced to always take or fall through or a user
- defined jump to subroutine is encountered.
-
- The maximum stack depth is flagged with a + if any
- conditional branches that are forced to always take or
- fall through are encountered. The stack depth now shows
- the current stack pointer. It should normally show -2
- after timing a subroutine ending with a return from
- subroutine.
-
-
- 4 - Maximum Execution
-
- This window shows the worst case execution path from
- the most recent analysis.
-
- The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
- Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
- as described in Special Keys when this window is
- selected.
-
-
-
-
-
- 21 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- 5 - Minimum Execution
-
- This window shows the best case execution path from the
- most recent analysis.
-
- The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
- Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
- as described in Special Keys when this window is
- selected.
-
-
- 6 - Stack Depth
-
- This window shows the worst case stack depth path from
- the most recent analysis.
-
- The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
- Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
- as described in Special Keys when this window is
- selected.
-
-
- Special Keys
-
- Some keys perform a specific function. They include
- function keys and hot keys.
-
-
- Function keys
-
- The function keys with a special purpose are:
-
- F1 Obtains context sensitive on-line help. A window in the
- middle of the screen is opened and additional
- information relating specifically to the current menu
- selection or error message is given.
-
- F2 Pulls down the Edit menu ready to edit the instruction
- located at the address that is positioned on the top
- line of the currently selected window. This allows for
- quickly changing something that was located while
- browsing the special nodes, disassembled program, or
- one of the three paths.
-
- F3 Moves the currently selected window to the next one in
- numerical order.
-
- F4 Moves the currently selected window to the previous one
- in numerical order.
-
- F5 Reserved for future use.
-
-
-
- 22 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- F6 Allows moving the current window around and changing
- its size on the screen.
-
-
- Hot keys
-
- Hot keys allow quick movement to a specific menu. All
- of the items on the main menu can be reached by
- pressing ALT followed by its first letter. The
- currently defined hot keys are:
-
- ALT-A Analysis
-
- ALT-C Clear
-
- ALT-D Disasm
-
- ALT-E Edit
-
- ALT-F File
-
- ALT-L File | Load
-
- ALT-O Options
-
- ALT-P Print
-
- ALT-Q Quit
-
- ALT-R File | Restore
-
- ALT-S File | Save
-
- ALT-1 - ALT-6 Select the window with that number.
-
-
- Other keys
-
- Home Moves the current line to the beginning in the selected
- window. When entering a filename, text, or number, it
- moves the cursor to the first character in the line and
- no longer affects the selected window.
-
- CTRL-Home Moves the current line to the beginning in the selected
- window.
-
- End Moves the current line to the end in the selected
- window. When entering a filename, text, or number, it
- moves the cursor to the last character in the line and
- no longer affects the selected window.
-
-
-
-
- 23 TimeStack User's Guide Chapter Two - Menus and Windows
-
-
-
- CTRL-End Moves the current line to the end in the selected
- window.
-
- Pg Up Moves the current line in the selected window up one
- full window's worth.
-
- Pg Dn Moves the current line in the selected window down one
- window's worth.
-
- Cur Up Moves the current line in the selected window up one
- line. If a pull down menu is active, the highlight bar
- will move to the previous item instead of affecting the
- selected window.
-
- CTRL-Pg Up Moves the current line in the selected window up
- one line.
-
- Cur Dn Moves the current line in the selected window down one
- line. If a pull down menu is active, the highlight bar
- will move to the next item instead of affecting the
- selected window.
-
- CTRL-Pg Dn Moves the current line in the selected window down
- one line.
-
- Ins Toggles insert mode when entering data.
-
- Del Deletes the character at the cursor position.
-
- Backspace Deletes the character just in front of the cursor.
-
- Cur Left Moves the cursor left one character.
-
- Cur Right Moves the cursor right one character.
-
-
- On-Line Help
-
- On-Line help is available at any time by pressing F1.
- This opens the help window which will contain
- additional context sensitive information on the current
- menu item.
-
- Pressing F1 again or pressing Esc will exit the on-line
- help.
-
- If the description is large enough it may be necessary
- to use Pg Up and Pg Dn to see all of it.
-
-
-
-
-
-
- 24 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter Three - Understanding TimeStack
-
-
-
-
-
-
-
- Explaining assembly language programming is beyond the
- scope of this guide. The reader should already be
- familiar with assembly language programming. Detail is
- provided in some areas so that programmers familiar
- with only one microprocessor may understand the
- examples and demo program that have been provided.
-
-
- Assembly Language Formats
-
- Throughout this User's Guide there are many references
- to, and examples of, assembly language programs.
- Different manufacturers of microprocessors and
- providers of assemblers have their own nuances when it
- comes to the style of the assembly language source
- code.
-
- The format that a particular assembler uses for its
- source code is of no consequence to TimeStack. It looks
- only at the generated hex data output of the assembler
- and accepts Intel or Motorola hex files.
-
- This guide will use the following format in its
- examples of assembly language programs:
-
- * a label must be terminated by a colon and begin in
- column one,
-
- * the opcode field never starts in column one,
-
-
-
-
-
- 25 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- * there must be at least one space between the opcode
- field and the operand field, and
-
- * comments must begin with a semicolon.
-
- All examples in this guide will use the Motorola 6800
- assembly language mnemonics because it is generally
- well known. Many of the other Motorola microprocessors
- have similarities in mnemonics. Programmers of Intel
- and other families of microprocessors should have no
- problem understanding the concepts that the simple
- examples will be showing.
-
- Figure 3-1 is an example of a typical listing. The
- first column is a line number. The second column is the
- address that the instruction is located at. The next
- bytes of data are the machine code for the opcode on
- that line.
-
-
-
-
-
- 000001 0000 ; Test procedure
- 000002 0000 ;
- 000003 0000 TEST:
- 000004 0000 8100 CMPA #0
- 000005 0002 2701 BEQ SKIP
- 000006 0004 4F CLRA
- 000007 0005 39 SKIP: RTS
-
-
-
- Figure 3-1 Typical Assembly Language Listing
-
-
-
-
-
-
- Differences in mnemonics
-
- There are probably as many different mnemonics as there
- are different processor families. Here is a table of
- the nomenclature used in this manual along with some of
- the common processors available for TimeStack.
-
-
-
-
-
-
-
-
- 26 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- MOTOROLA INTEL
- DESCRIPTION 6800 / 6805 8051 / 8048
- Jump JMP JMP
- Jump indirect JMP 0,X JMP @A+DPTR
- Jump subroutine JSR CALL
- Jump subroutine indirect JSR 0,X
- Return subroutine RTS RET
- Branch relative BRA JMP
- Conditional branch if zero BEQ JZ
- Conditional branch if not BNE JNZ
- zero
-
- Many of the other opcodes have similar minor
- differences.
-
-
- Demo program limitations
-
- The demonstration program that is included with
- TimeStack is based on the Motorola 6811 processor. Some
- things have been removed to make it smaller and thus it
- has the following limitations:
-
- * The opcodes that manipulate the B or D registers
- have been removed.
-
- * Any special opcodes such as MUL have been removed.
-
-
- Hex Files
-
- TimeStack reads the hex file that represents a program
- for use in its analysis. A hex file contains the ASCII
- representation of bytes of information. Using a hex
- file to save binary information that is loaded at
- specific memory addresses is beneficial for a couple of
- reasons. First, the starting address that a block of
- data should be located is included. Second, each line
- has a checksum. Third, a hex file is human readable.
-
- The hex file name is entered on the File | Load menu.
-
- There are many different hex file formats. The two most
- popular formats are referred to as Motorola Hex and
- Intel Hex.
-
- TimeStack looks at the hex file and attempts to
- determine if it is a Motorola or Intel hex file based
- on the first couple of characters in each record. The
- checksum is calculated and checked for each record. The
- record is loaded into TimeStack and placed in a virtual
-
-
-
- 27 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- memory area at the address specified for it by the
- record.
-
-
- Motorola hex files
-
- Motorola hex files are composed of records. There is
- one record per line. Each line begins with the letter S
- and are thus often referred to as S records. The next
- letter is a number that indicates the type of S record.
- Each byte of data is represented by two hex digits. The
- first byte is the number of bytes that follow and its
- value does not count itself. The next two bytes
- represent a 16-bit address where the data bytes in the
- current record should be located. The address is
- followed by the data bytes. The last byte in the record
- is the checksum and its value is calculated such that
- the sum of all bytes in the record when truncated to a
- one byte value have the hexadecimal value of FF.
-
- If you were to look at an S record it might look
- something like this.
-
- S10D10500501014A26FC0926F839BF
-
- Separating this into its different fields makes it
- easier to see.
-
- S1 0D 1050 05 01 01 4A 26 FC 09 26 F8 39 BF
-
- S1 is the record type, 0D is the number of bytes (14
- decimal), 1050 is the address that the data bytes 05,
- 01, ... 39 are placed, and BF is the checksum.
-
-
- Intel hex files
-
- Intel hex files are also composed of records, one
- record per line. Each line begins with a colon. Each
- byte of data is represented by two hex digits. The
- first byte is the number of data bytes. That is
- followed by two bytes that form a 16-bit address where
- the data bytes should be placed. The next byte is the
- record type. This is followed by the data bytes. Last
- is the checksum, its value calculated so that the sum
- of all bytes in the record comes out to a value of zero
- when truncated to a single byte.
-
- If you were to look at an Intel record it might look
- something like this.
-
-
-
-
- 28 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- :0A0860006300FF63FF0063FFFF2247
-
- Separating it into its different fields results in
- this.
-
- : 0A 0860 00 63 00 FF 63 FF 00 63 FF FF 22 47
-
- Where 0A is the number of data bytes (10 decimal), 0860
- is the address that the data bytes 63, 00, ... 22 are
- placed, and 47 is the checksum.
-
-
- Possible errors
-
- The possible errors loading a hex file are:
-
- * The file may not appear to be a hex file. This could
- be cause by the first character in each line not
- being the letter S or a colon.
-
- * The checksum is incorrect. This would indicate a
- fundamental problem with the hex file, perhaps a
- problem in copying at some point or corrupt data.
-
-
- Program Listings
-
- A program listing is required to do an analysis with
- TimeStack. Program listings are produced by an
- assembler. They show the absolute locations of the
- generated object code for each assembly language
- instruction.
-
- They are needed because these addresses are entered by
- the user so that analysis may take place.
-
-
- Configuration Files
-
- Configuration files are used to save information about
- TimeStack that is useful to restore when TimeStack is
- executed in the future. Some of the things saved in a
- configuration file are:
-
- * Start and stop addresses
-
- * Window size and location on the screen
-
- * Processor type selected, clock rate, and clock
- divisor.
-
-
-
-
- 29 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- The default name for a configuration file is the name
- of the TimeStack executable with .CFG as an extension.
- Thus, for the demo program the default name would be
- TSDEMO.CFG. If the default configuration file is found
- in the current working directory when TimeStack starts
- up, it is automatically loaded.
-
-
- Node Files
-
- Node files contain the information displayed in the
- Special Nodes window. They are useful for saving any
- special conditional branch setups or jump subroutine
- instruction override information.
-
- The file name is automatically given the extension .NOD
- if none has been entered.
-
-
- Temporary Files
-
- Temporary files are created in the current working
- directory when TimeStack runs. At least 50K of free
- disk space is needed to hold them.
-
- The names of the temporary files created while running
- are: MAXDATA.TMP, MINDATA.TMP, and STKDATA.TMP.
-
- If there is no space to hold these files a fatal error
- message is displayed and TimeStack returns to DOS.
-
-
- Start and Stop Addresses
-
- The start and stop addresses are considered to be
- inclusive in the analysis. They may also be the same
- value, in which case only the single instruction at
- that address is analyzed. If the instruction at the
- stop address is a jump subroutine, the subroutine will
- be included in the analysis results.
-
- Even though the stop address may be less that the start
- address, there are few, if any, practical reasons to do
- this. Most processors and programs have a flow of
- execution that moves toward increasing address values.
- A stop address composed of all F's is special.
-
- It tells TimeStack to look for a return from subroutine
- instruction and stop the analysis when it is
- encountered. The stop address and size of the procedure
-
-
-
-
- 30 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- displayed in the Analysis Results window will
- automatically be determined.
-
-
- Timing Concepts
-
- A program is composed of a series of sequential
- statements. These statements are executed by the
- processor one at a time in a linear fashion, sequencing
- through program memory. The length of time it takes to
- execute any given series of statements is calculated as
- the sum of each instruction's execution time.
-
- The linear processing of statements may be interrupted
- by special instructions called branches or jumps. In
- the simple case, the linear flow changes to another
- address location in program memory and continues its
- linear flow.
-
- It is the job of TimeStack to look at every possible
- combination of these paths to obtain the results of the
- analysis.
-
-
- Conditional Branches
-
- Processors have a special instruction called a
- conditional branch that allows them to make a choice
- between one of two paths to take. The linear flow
- through a conditional branch may continue and FALL
- through, or the processor may TAKE the conditional
- branch and disrupt the flow. In TimeStack a branch is
- NORMAL when both directions are analyzed.
-
- TimeStack looks at the flow of execution from a given
- starting address in program memory to a given stop
- address in program memory. The analysis determines what
- combination of TAKEs and FALLs gives the absolute worst
- case theoretical time possible and shows this path. It
- also shows the best (or fastest) time and its path. It
- also shows the worst case stack depth usage and its
- path.
-
-
- Take
-
- A conditional branch has an address associated with it.
- When the branch is taken, program execution continues
- at this address.
-
-
-
-
-
- 31 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- The number of times a branch is taken before it falls
- though may be associated with a conditional branch. A
- branch may also be forced so that it is always taken.
-
-
- Fall
-
- If a conditional branch is not taken, it must fall
- through. Program execution continues with the
- instruction immediately following the conditional
- branch when it falls through. The number of times a
- branch falls through before it is taken may also be
- associated with a conditional branch. A branch may be
- forced to always fall through.
-
-
- Normal
-
- A branch that has no special conditions associated with
- it such as take or fall is considered to be normal.
- Conditional branches that move backwards might be part
- of a loop. To indicate to TimeStack that this is not
- the case, they may be set to normal.
-
-
- Program Loops
-
- A loop is only possible if some type of backwards
- branching occurs. TimeStack is not a simulator and has
- no knowledge of the possible implications of a
- backwards branch. If the backwards branch causes some
- type of loop to be formed, the user must assist the
- TimeStack and give more information about the loop.
-
- The user tells TimeStack how a conditional branch
- should operate in special situations. This is done by
- indicating how many times a conditional branch should
- FALL through before taking a branch or how many times
- to TAKE the branch before falling through.
-
- !! -> A conditional branch may be set to TAKE (take the
- branch), FALL (fall through the branch), and NORMAL
- (try both take and fall paths). In addition, TAKE and
- FALL may be set to a number that indicates how many
- times to take a branch before falling through or how
- many times to fall through before taking the branch.
-
- A conditional branch may be said to TAKE 5 times. This
- means TimeStack would not look at the path that falls
- through until it has followed the path the branch takes
- five times.
-
-
-
- 32 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- A NORMAL conditional branch is one that branches
- backwards yet is not actually a part of a loop.
-
- The conditional branch in Figure 3-2 would be set to
- TAKE 26 times. This is one less that the actual number
- of times the loop is done because the 27th time through
- the loop, the branch is not taken but falls through.
-
-
-
-
-
- 000001 0006 ; Loop type 1
- 000002 0006 ;
- 000003 0006 861B LDAA #27
- 000004 0008 6F00 LOOP1: CLR 0,X
- 000005 000A 08 INX
- 000006 000B 4A DECA
- 000007 000C 26FA BNE LOOP1
- 000008 000E 39 RTS
-
-
-
- Figure 3-2 Loop with Exit at Bottom
-
-
-
- The conditional branch in Figure 3-3 would be set to
- FALL 27 times. That is because the increment of the
- loop counter is done after the conditional branch test.
-
-
-
-
-
- 000001 000F ; Loop type 2
- 000002 000F ;
- 000003 000F CE0000 LDX #0
- 000004 0012 8C001B LOOP2: CPX #27
- 000005 0015 2705 BEQ DONE
- 000006 0017 6F00 CLR 0,X
- 000007 0019 08 INX
- 000008 001A 20F6 BRA LOOP2
- 000009 001C 39 DONE: RTS
-
-
-
- Figure 3-3 Loop with Exit in the Middle
-
-
-
-
-
-
- 33 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
-
-
-
-
- Look at these examples very closely. Understanding how
- many times to specify a branch to TAKE or FALL is very
- important. This information is entered using the Edit
- menu and specifying the address of the conditional
- branch.
-
-
- Subroutines
-
- The processor instructions that jump, branch, and jump
- subroutine change the execution path. If a jump or
- branch is backwards, then there is the possibility of
- an infinite loop. In these cases the user is given the
- chance to edit the special node information which
- usually means setting up a conditional branch to TAKE
- or FALL some number of times.
-
- Warning If a jump subroutine is encountered, then it is assumed
- that a return from subroutine will be found. The stop
- address is ignored during the jump to subroutine. When
- a return from subroutine is found, TimeStack returns to
- the location immediately following the jump subroutine
- even if the return address on the stack was changed.
-
- A maximum cycle time and stack depth may be associated
- with any jump subroutine instruction. The values
- entered will be used whenever that instruction is
- encountered. This allows calls from different locations
- in the program to the same subroutine to have different
- maximum cycle times and stack depth values.
-
- The value entered for maximum cycle time is also used
- for the minimum cycle time. This causes the minimum
- cycle time to be flagged (see Windows - Statistics).
-
- Jump subroutine instructions that are indirect must
- have the cycle time and stack depth information entered
- for them. This is more versatile than entering a
- destination address. The analysis will always include
- the cycle time and stack depth of the jump subroutine
- instruction itself. Thus, a value of zero for both the
- cycle time and stack depth will only include the cycle
- time and stack depth for the jump subroutine
- instruction.
-
-
-
-
-
-
- 34 TimeStack User's Guide Chapter Three - Understanding TimeStack
-
-
-
- Jump Indirect
-
- Jump instructions that are indirect may have an address
- associated with them. If none has been entered for
- them, then a prompt for an address will be given on the
- first occurrence of the instruction during analysis.
-
- The option to pretend the instruction is a return
- subroutine is also made. This is useful for subroutines
- that pull the return address and use it at a later time
- as shown in Figure 3-4
-
-
-
-
-
- 000001 001D ; Jump indirect used
- 000002 001D ; as return subroutine
- 000003 001D ;
- 000004 001D JMPIND:
- 000005 001D 01 NOP
- 000006 001E 38 PULX
- 000007 001F 6E00 JMP 0,X
-
-
-
- Figure 3-4 Jump Indirect used as Return from
- Subroutine
-
-
-
-
-
-
- Stack Depth
-
- When an analysis is done, the current stack depth is
- assumed to be zero. As the analysis progresses there
- may be instructions that modify the stack by pushing
- and pulling data. If any instructions that modify the
- stack pointer directly are encountered, the resulting
- values from the analysis will not be correct.
-
-
-
-
-
-
-
-
-
-
-
-
- 35 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter Four - Tutorial
-
-
-
-
-
-
-
- Using TimeStack is usually as simple as specifying the
- starting address of a subroutine. It can analyze the
- complete control function of a complex algorithm that
- takes hundreds of milliseconds to execute as easily as
- it handles checking how many microseconds a multiply
- function takes to run.
-
- This will be a short look at a typical analysis. The
- executable program and files used here are included
- with TimeStack. Just start at the beginning here and
- work your way through one step at a time.
-
-
- Look at Listing
-
- The first step should be to look over a listing of the
- program to get an understanding of what it does. The
- program in Appendix A is a nonsense program that only
- provides routines for learning about TimeStack. The hex
- file that matches this listing is called: DEMO.HEX.
-
-
- Invoking Program
-
- The program is invoked by changing to the TimeStack
- directory and typing the name of the program that
- corresponds to the processor family desired. To run the
- correct program for the demo type:
-
- TSDEMO.
-
-
-
-
- 36 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
- Configuring TimeStack
-
- The first time TimeStack is entered it will be
- necessary to configure it. Choose the Options menu by
- pressing the letter O from the main menu or the hot key
- ALT-O from any place in the program.
-
- The submenu Type allows selection of the specific
- processor. Press T to select this item or press Enter
- since the highlighted menu bar is already on the item.
- In this case there is no choice to make. The demo
- program knows only one type of processor, the 68DEMO.
- Press 1 to select it specifically, Enter to choose the
- currently selected item, or Esc to abort any changes.
-
- The submenu Clock allows entering the clock rate of the
- processor that will be used. Use the Cur Dn key to
- select this item and press Enter or just press the
- letter C as a shortcut. To obtain the same results that
- will be shown here be sure the value is set to 1 which
- means 1.0 megahertz.
-
- The submenu Get information displays a variety of
- information. At the top is the current version of the
- TimeStack program. Also shown is the currently selected
- processor, clock rate, and clock divisor. The current
- working directory and all file names that have been
- entered or have default values are given. The amount of
- available memory for use in analysis is shown.
-
- It is usually desirable to save any work that has been
- done. This may be set up to be done automatically upon
- exit. Use the submenu 1. Configuration to have the
- configuration automatically saved. Use the submenu 2.
- Node list to have the special node list automatically
- saved. Enable both of these options by answering Yes at
- their prompts.
-
-
- Load the Hex File
-
- Press ALT-L to jump right to the File | Load menu. At
- the prompt for the hex data file name, enter DEMO. This
- is the name of the demonstration hex file and the
- extension .HEX will automatically be added.
-
- Immediately after pressing Enter, a box is displayed in
- the center of the screen. It indicates that it is
- loading the hex file. The box disappears after the hex
- file is loaded.
-
-
-
-
- 37 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
- Timing Subroutines
-
- Press ALT-A to move quickly to the Analysis menu.
- Figure 4-1 shows the procedure to be analyzed. For the
- start address type in 2A and press Enter. Note that
- leading zeros on addresses do not need to be entered.
-
- For the stop address leave the FFFF that is already
- there and press Enter again. This tells the TimeStack
- to analyze the procedure called SIMPLE that starts at
- address 002A and to stop when a return from subroutine
- instruction is encountered.
-
-
-
-
-
- 000021 002A ; Simple subroutine
- 000022 002A ;
- 000023 002A ; no conditional branches.
- 000024 002A ;
- 000025 002A ; 11 min 11 max 0 stack
- 000026 002A ;
- 000027 002A SIMPLE:
- 000028 002A 40 NEGA
- 000029 002B 48 ASLA
- 000030 002C 8B05 ADDA #5
- 000031 002E 39 RTS
-
-
-
- Figure 4-1 Simple Subroutine
-
-
-
-
-
- The Analysis Results window will show that this small
- procedure took a minimum of 11 CPU internal clock
- cycles, a maximum of 11 cycles, and a maximum stack
- depth of 0 bytes of stack. Notice that the stack depth
- now indicates -2 bytes. This represents the stack
- pointer right now after the analysis has finished. It
- means nothing was left remaining on the stack. In fact,
- two bytes have been pulled off that were not pushed on
- during the analysis. This is caused by the return from
- subroutine instruction pulling its two bytes of address
- information off of the stack.
-
-
-
-
-
-
- 38 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
- The actual stop address was found for us. The
- subroutine ranges from 002A to 002E. Its size was 5
- bytes.
-
- Using a 1 Megahertz external clock this subroutine will
- execute in an absolute worst case maximum time of 44.0
- microseconds. This includes the time from the start of
- the first instruction until the return from subroutine
- instruction finishes.
-
-
- Timing Subroutines with Conditional Branches
-
- From now on it will be assumed that you are familiar
- with how to analyze a procedure from the Analysis menu.
- If you are not, review the previous section again. The
- stop address for most of the examples will be left at
- FFFF.
-
- Now analyze the procedure called FWDBRA. Figure 4-2
- contains this procedure. It has a start address of
- 002F. The results of this analysis have put some
- information in the Maximum Execution, Minimum
- Execution, and Stack Depth windows. It shows that to
- obtain the maximum execution time the conditional
- branch at 0030 must FALL through, the branch at 0036
- must TAKE, and the last branch at 003E must FALL
- through. Only conditional branches are shown because
- they are the only opportunity to change program flow.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 39 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
-
-
- 000032 002F ; Forward branches
- 000033 002F ;
- 000034 002F ; only forward branches.
- 000035 002F ;
- 000036 002F ; 16 min 26 max 0 stack
- 000037 002F ;
- 000038 002F FWDBRA:
- 000039 002F 47 ASRA
- 000040 0030 2406 BCC FWD010
- 000041 0032 CE002A LDX #SIMPLE
- 000042 0035 47 ASRA
- 000043 0036 2405 BCC FWD020
- 000044 0038 FWD010:
- 000045 0038 CE002F LDX #FWDBRA
- 000046 003B 2006 BRA FWDRET
- 000047 003D FWD020:
- 000048 003D 47 ASRA
- 000049 003E 2403 BCC FWDRET
- 000050 0040 CE0044 LDX #BCKBRA
- 000051 0043 FWDRET:
- 000052 0043 39 RTS
-
-
-
- Figure 4-2 Forward Branches
-
-
-
-
-
- It should be mentioned that the paths shown by
- TimeStack only represent one way to achieve the
- analysis results. There may be others that are equal
- but not shown.
-
- The next procedure is called BCKBRA. This is shown in
- Figure 4-3. Begin the analysis by entering its start
- address of 0044. Any branch that has a destination
- which can move the execution backwards creates the
- possibility of forming a loop. The Edit Branch window
- is opened on the branch at 0054. The edit window
- indicates the branch is CLEAR because it has not had
- any attributes set. This branch does not participate in
- forming any kind of loop. It merely branches backwards
- to a return from subroutine instruction. Of the four
- possible choices, choose Normal for this branch.
-
-
-
-
-
-
- 40 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
-
-
- 000053 0044 ; Backward normal branches
- 000054 0044 ;
- 000055 0044 ; all normal branches.
- 000056 0044 ;
- 000057 0044 ; 16 min 26 max 0 stack
- 000058 0044 ;
- 000059 0044 BCKBRA:
- 000060 0044 47 ASRA
- 000061 0045 2407 BCC BCK010
- 000062 0047 CE002A LDX #SIMPLE
- 000063 004A 47 ASRA
- 000064 004B 2406 BCC BCK020
- 000065 004D BCKRET:
- 000066 004D 39 RTS
- 000067 004E BCK010:
- 000068 004E CE002F LDX #FWDBRA
- 000069 0051 20FA BRA BCKRET
- 000070 0053 BCK020:
- 000071 0053 47 ASRA
- 000072 0054 24F7 BCC BCKRET
- 000073 0056 CE0044 LDX #BCKBRA
- 000074 0059 39 RTS
-
-
-
- Figure 4-3 Backwards Branches that are Normal
-
-
-
-
-
- The analysis continues to run but now issues a warning
- about a backwards branch at 0051. This branch, since it
- also moves backwards, may be forming part of a loop.
- Upon inspection it is seen that this is not the case.
- Press any key to remove the warning and then respond to
- the edit branches now prompt with a No.
-
- The Special Nodes window now displays the conditional
- branch that was entered during the analysis.
-
-
- Timing Loops
-
-
- Simple loop
-
- The procedure SIMPLOOP at address 005A shown in Figure
- 4-4, forms a simple loop. Begin the analysis of this
-
-
-
- 41 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
- procedure. The conditional branch at 005E will be
- pulled up during the analysis. In order to determine
- what should be entered it will be necessary to look at
- the program logic. In this case, it looks as if the
- code inside the loop should be executed five times. To
- achieve this the conditional branch will be taken four
- times. The fifth time through the loop the branch falls
- through. At the prompt for the branch choose Take. At
- the prompt for the number of times enter 4.
-
-
-
-
-
- 000075 005A ; Simple loop
- 000076 005A ;
- 000077 005A ; A simple loop.
- 000078 005A ;
- 000079 005A ; 42 min 42 max 0 stack
- 000080 005A ;
- 000081 005A SIMPLOOP:
- 000082 005A 8605 LDAA #5
- 000083 005C SIMP010:
- 000084 005C 01 NOP
- 000085 005D 4A DECA
- 000086 005E 26FC BNE SIMP010
- 000087 0060 39 RTS
-
-
-
- Figure 4-4 Loop with Exit at Bottom
-
-
-
-
-
- When the analysis is complete press ALT-4. This selects
- the Maximum Execution Window (window number four). Use
- the Cur Up and Cur Dn keys to look at all of the
- entries. Follow the loop through and see how it works.
- Understanding this is very important when configuring a
- loop.
-
-
- Loop with middle exit
-
- The procedure BACKLOOP at address 0061 shown in Figure
- 4-5 is another common type of loop. It has its exit
- near the top or middle. Begin the analysis. TimeStack
- will warn that the branch at address 0067 is backwards
- and ask if you want to edit branches at this time.
-
-
-
- 42 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
- Answer with a Yes. It is necessary to inspect the
- program to determine which conditional branch must be
- configured to exit the loop. The branch at address 0064
- is the correct one for this example. It must be set to
- Fall through five times. Understanding this type of
- loop is also very important.
-
-
-
-
-
- 000088 0061 ; Loop with backwards branch
- 000089 0061 ;
- 000092 0061 ;
- 000093 0061 ; 62 min 62 max 0 stack
- 000094 0061 ;
- 000095 0061 BACKLOOP:
- 000096 0061 8606 LDAA #6
- 000097 0063 BACK010:
- 000098 0063 4A DECA
- 000099 0064 2703 BEQ BACKRET
- 000100 0066 01 NOP
- 000101 0067 20FA BRA BACK010
- 000102 0069 BACKRET:
- 000103 0069 39 RTS
-
-
-
- Figure 4-5 Loop with Middle Exit
-
-
-
-
-
-
- Printing the Results
-
- The results of this analysis may be sent to a printer.
- Be sure the printer is turned on, loaded with paper,
- and on-line. The output is sent to the DOS print device
- PRN.
-
- Press ALT-P to select the Print menu and then press 3.
- Path to Printer. A message will appear the says to
- prepare the printer. When the printer is ready, press
- Enter. The printing will then begin immediately. A
- message is displayed that indicates printing is in
- progress. Esc may be pressed during this time to abort.
-
- If there is a problem communicating with the printer, a
- message will be displayed indicating what is wrong.
-
-
-
- 43 TimeStack User's Guide Chapter Four - Tutorial
-
-
-
- After corrective action is taken press Enter to
- continue. Esc may be pressed to abandon the print.
-
-
- Quitting the Program
-
- Now quit the program by pressing ALT-Q. TimeStack will
- attempt to save the special node list but since a node
- list file name has not been entered yet it will as if
- you wish to save your changes. Answer Yes to this
- question and enter whatever name you wish to give the
- node list. If you do not enter an extension, .NOD will
- automatically be added.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 44 TimeStack User's Guide Chapter Five - Timing Strategies
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter Five - Timing Strategies
-
-
-
-
-
-
-
-
- Have a Listing Ready
-
- It is very impractical to use TimeStack without a
- current listing of the program to be worked on. It is
- possible to use the Disassemble feature to assist but
- this is still difficult. A listing provides all of the
- addresses that will need to be entered as start
- addresses and when editing conditional branches. It
- will be needed to determine how many times to take
- loops and destination of indirect jumps.
-
-
- What Units to Use
-
- All timing information is given in cycles. This refers
- to the processor's internal cycles as defined by the
- manufacturer of the device. For convenience, this
- number is calculated to microseconds based on the given
- external clock rate divided by the clock divisor value.
-
- All memory usage is defined in bytes. A byte is eight
- bits of information and is a fundamental unit to all
- processors handled by TimeStack. All stack usage is
- measured in bytes.
-
-
- Start Small
-
- It is usually best to start with the smaller
- subroutines that may be called from throughout the
-
-
-
- 45 TimeStack User's Guide Chapter Five - Timing Strategies
-
-
-
- program. This way, many of the loops will be discovered
- early without having to search through the listing.
-
- Look at the different paths (maximum cycles, minimum
- cycles, and worst case stack depth) and follow them
- through the listing a couple of times to develop a feel
- for the program. Compare the results on subroutines
- that have been timed and documented before.
-
-
- Be Realistic
-
- The worst case path may not be realistic and you may
- desire to force a few branches to avoid this. This
- usually happens when the logic gets divided into
- multiple parts or spread out. It also happens when the
- same condition is checked numerous times throughout the
- program.
-
- Figure 5-1 is a simple example of this. In the first
- part of the logic the NOP instruction will be executed
- if register A is not equal to zero. In the second part
- of the logic the NOP instruction will be executed if
- accumulator A is equal to zero. Obviously both NOPs
- could not be executed during the same pass through the
- procedure. TimeStack does not detect this and the
- maximum execution time will include the time for both
- NOPs. In the same way, the minimum execution time will
- not time either NOP.
-
-
-
-
-
- 000001 0000 ; Unrealistic worst case path
- 000002 0000 ;
- 000003 0000 UNREAL:
- 000004 0000 8100 CMPA #0
- 000005 0002 2701 BEQ SKIP1
- 000006 0004 01 NOP
- 000007 0005 SKIP1:
- 000008 0005 8100 CMPA #0
- 000009 0007 2600 BNE SKIP2
- 000010 0009 01 NOP
- 000011 000A SKIP2:
- 000012 000A 39 RTS
-
-
-
- Figure 5-1 Unrealistic Worst Case Path
-
-
-
-
- 46 TimeStack User's Guide Chapter Five - Timing Strategies
-
-
-
-
-
-
-
- It helps if this type of logic is located in a
- subroutine. By forcing one of the branches to always be
- taken, the realistic maximum execution time will be
- found. Then if this procedure is subsequently called
- from another procedure the expected results will be
- found.
-
-
- More Than One Path
-
- It is possible that there is more than just the single
- path shown by TimeStack that meets the maximum and
- minimum execution time and maximum stack depth. Figure
- 5-2 is a simple example of a procedure that has
- identical execution times no matter which path is
- taken.
-
-
-
-
-
- 000013 000B ; Identical Paths
- 000014 000B ;
- 000015 000B IDENT:
- 000016 000B 8100 CMPA #0
- 000017 000D 2702 BEQ IDENT1
- 000018 000F 01 NOP
- 000019 0010 39 RTS
- 000020 0011 IDENT1:
- 000021 0011 01 NOP
- 000022 0012 39 RTS
-
-
-
- Figure 5-2 Identical Worst Case Paths
-
-
-
-
-
-
-
- As it turns out, in most cases this is not usually a
- problem. If you attempt to optimize the given maximum
- execution path and make changes to it, future analysis
- will find the new resulting maximum execution paths.
-
-
-
-
- 47 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter Six - Advanced Tutorial
-
-
-
-
-
-
-
- There are many more subtle points that need to brought
- out to use the full capabilities of TimeStack and
- obtain accurate results.
-
- The complete program for all of the procedures here can
- be found in Appendix A.
-
-
- Invoke Program Again
-
- Invoke the TimeStack demo program again. If you have
- not already run the program at least once, see the
- Chapter Four tutorial. Briefly this involves changing
- to the TimeStack directory and typing in the demo
- program name: TSDEMO.
-
- If the demo hex file was not automatically loaded,
- return to Chapter Four and review Invoking Program,
- Configuring TimeStack, and Load the Hex File.
-
-
- Complex Loops
-
- A complex loop is one that TimeStack was not able to
- correctly analyze. This occurs because the conditional
- branch that was setup as the exit for the loop was not
- the conditional branch that really is the exit for the
- maximum execution path.
-
- Analyze the procedure COMPLEX at address 006A shown in
- Figure 6-1. The conditional branch at 0070 is brought
-
-
-
- 48 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
- up in the edit window because it is a backwards branch
- and therefore may participate in a loop. Looking at the
- algorithm it can be determined that this branch should
- be set to TAKE 2.
-
-
-
-
-
- 000104 006A ; Complex loop
- 000105 006A ;
- 000106 006A ; A loop that will trigger the
- 000107 006A ; complex loop message.
- 000108 006A ;
- 000109 006A ; 43 min 43 max 2 stack
- 000110 006A ;
- 000111 006A COMPLEX:
- 000112 006A 8605 LDAA #5
- 000113 006C COMPL1:
- 000114 006C 4A DECA
- 000115 006D 2704 BEQ COMPX1
- 000116 006F 4A DECA
- 000117 0070 26FA BNE COMPL1
- 000118 0072 39 RTS
- 000119 0073 COMPX1:
- 000120 0073 BD0076 JSR COMPX2
- 000121 0076 COMPX2:
- 000122 0076 39 RTS
-
-
-
- Figure 6-1 Complex Loop
-
-
-
-
-
- During the analysis an error message is displayed. It
- says that the branch at address 006D is involved in a
- structure too difficult for a simple analysis.
-
- Upon closer inspection of the branch at 006D and the
- algorithm, it can be seen that the conditional branch
- at 006D is the true exit for the loop. Press ALT-E to
- pull up the Edit window, enter the address 006D, and
- set it to FALL 2. Now when the analysis is run, it
- completes with the correct answer.
-
-
-
-
-
-
-
- 49 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
- Indirect Jump
-
- Indirect jumps are handled in a simple manner. They may
- either be forced to act just like a return from
- subroutine or you may enter an address to jump to.
-
- Analyze the procedure INDJMP at address 0077 shown in
- Figure 6-2. A message appears that says the indirect
- jump at address 0077 needs a destination. After you
- press Enter, you are asked if you would like to treat
- the indirect jump like a return from subroutine. In
- this example respond with No. A prompt for the
- destination of the indirect jump is given. Use the
- address 007A as the destination.
-
-
-
-
-
- 000123 0077 ; Indirect jump test
- 000124 0077 ;
- 000125 0077 ; Indirect jump that goes some
- 000126 0077 ; place and one that returns.
- 000127 0077 ;
- 000128 0077 ; 11 min 11 max 0 stack
- 000129 0077 ;
- 000130 0077 INDJMP:
- 000131 0077 6E00 JMP 0,X
- 000132 0079 01 NOP
- 000133 007A JMPRET:
- 000134 007A 38 PULX
- 000135 007B 6E00 JMP 0,X
-
-
-
- Figure 6-2 Indirect Jump
-
-
-
-
-
- Now the analysis stops at the indirect jump at 007B.
- Respond with Yes when it asks if it should be treated
- as a return from subroutine. The reason for this is the
- algorithm in this example pulls the return address from
- the stack and then uses the indirect jump to jump to
- that return address at the end of the procedure. This
- is exactly what a return from subroutine does and is a
- special way that indirect jumps are used in programs
- from time to time.
-
-
-
-
- 50 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
- Untimeable Instructions
-
- Some instructions do not make sense to time. Start the
- analysis of INSTIME at address 007D shown in Figure 6-
- 3. The analysis will stop with an error stating that
- the opcode at 007F is not able to be analyzed for time.
-
-
-
-
-
- 000136 007D ; Instruction not timeable
- 000137 007D ;
- 000138 007D ; This can not be timed.
- 000139 007D ;
- 000140 007D ; 8 min 8 max 0 stack
- 000141 007D ;
- 000142 007D INSTIME:
- 000143 007D 2701 BEQ INST010
- 000144 007F CF STOP
- 000145 0080 INST010:
- 000146 0080 39 RTS
-
-
-
- Figure 6-3 Instructions that can not be timed
-
-
-
-
-
-
-
- This particular instruction, the STOP instruction,
- causes the processor to stop executing code. It does
- not make sense to time it.
-
-
- Illegal Instructions
-
- An opcode that is not recognized by the processor
- causes an error message to be displayed. If an analysis
- of procedure ILLEGAL at 0081 shown in Figure 6-4 is
- done, the error message will complain of an illegal
- opcode at address 0083.
-
-
-
-
-
-
-
-
-
- 51 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
-
-
- 000147 0081 ; Illegal instructions
- 000148 0081 ;
- 000149 0081 ; These are illegal in demo.
- 000150 0081 ;
- 000151 0081 ; 8 min 8 max 0 stack
- 000152 0081 ;
- 000153 0081 ILLEGAL:
- 000154 0081 2701 BEQ ILL010
- 000155 0083 3D MUL
- 000156 0084 ILL010:
- 000157 0084 39 RTS
-
-
-
- Figure 6-4 Illegal Instructions
-
-
-
-
-
- If this is seen it is probably one of these problems:
-
- * The wrong hex file has been loaded. The hex file
- does not match the processor that this version of
- TimeStack handles.
-
- * The wrong processor has been chosen. Use the Options
- menu to verify that the correct processor is being
- used.
-
- * The wrong start address was entered. If the start
- address is not the beginning of an instruction it is
- difficult to predict how it will be disassembled.
-
-
- Nested Loops
-
- There are a couple of ways that loops may become
- nested. Nested loops have special considerations that
- must be taken into account.
-
-
- Loops inside subroutines
-
- Look at Figure 6-5 which shows the procedure OUTLOOP at
- address 0085. This procedure contains a loop that calls
- another procedure INLOOP using a jump subroutine.
-
-
-
-
-
- 52 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
-
-
- 000158 0085 ; Outer loop
- 000159 0085 ;
- 000160 0085 ; Outer loop of nested loops.
- 000161 0085 ;
- 000162 0085 ; 482 min 482 max 3 stack
- 000163 0085 ;
- 000164 0085 OUTLOOP:
- 000165 0085 8605 LDAA #5
- 000166 0087 OUT010:
- 000167 0087 36 PSHA
- 000168 0088 BD0090 JSR INLOOP
- 000169 008B 32 PULA
- 000170 008C 4A DECA
- 000171 008D 26F8 BNE OUT010
- 000172 008F 39 RTS
-
-
-
- Figure 6-5 Loop with a call to a Procedure
-
-
-
- The procedure INLOOP shown in Figure 6-6 also contains
- a loop. Because this loop is located inside a procedure
- that is called using a jump subroutine, no special
- considerations are needed.
-
-
-
-
-
- 000173 0090 ; Inner loop
- 000174 0090 ;
- 000175 0090 ; Inner loop of nested loops.
- 000176 0090 ;
- 000177 0090 ; 77 min 77 max 0 stack
- 000178 0090 ;
- 000179 0090 INLOOP:
- 000180 0090 860A LDAA #10
- 000181 0092 IN010:
- 000182 0092 01 NOP
- 000183 0093 4A DECA
- 000184 0094 26FC BNE IN010
- 000185 0096 39 RTS
-
-
-
- Figure 6-6 Procedure that contains a Loop
-
-
-
-
- 53 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
-
-
-
-
- Now analyze OUTLOOP starting at address 0085. The first
- branch that will be questioned is the one at 0094 in
- INLOOP. This is because it happens to be the first
- backwards branch encountered when the analysis took the
- jump subroutine. Upon inspection of the algorithm this
- branch should be set to Take nine times. The next
- backwards branch questioned is the one at 008D. This
- should be set to Take four times according to its
- algorithm.
-
-
- Loops inside other loops
-
- A loop that is inside of another loop does have special
- considerations. The procedure TWOLOOP at address 0097
- as shown in Figure 6-7 is an example of this. There is
- an outer loop that is done five times. There is an
- inner loop that is done ten times every time the outer
- loop is done. Thus, the inner loop is done a total of
- 50 times.
-
-
-
- 000186 0097 ; Two loops
- 000187 0097 ;
- 000188 0097 ; Two loops in one.
- 000189 0097 ;
- 000190 0097 ; 436 min 436 max 0 stack
- 000191 0097 ;
- 000192 0097 TWOLOOP:
- 000193 0097 CE0005 LDX #5
- 000194 009A TWO010:
- 000195 009A 01 NOP
- 000196 009B 860A LDAA #10
- 000197 009D TWO020:
- 000198 009D 01 NOP
- 000199 009E 4A DECA
- 000200 009F 26FC BNE TWO020
- 000201 00A1 ;
- 000202 00A1 09 DEX
- 000203 00A2 26F6 BNE TWO010
- 000204 00A4 ;
- 000205 00A4 39 RTS
-
-
-
- Figure 6-7 Nested Loops
-
-
-
- 54 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
-
-
-
-
- Edit the branch at 009F to Take 49 times and the branch
- at 00A2 to Take four times to get the correct results
- for this procedure.
-
-
- Subroutines with Different Execution Times
-
- Some subroutines have different execution times based
- on parameters they are called with. Look at Figure 6-8.
- The procedure VARLOOP at address 00A5 calls DIFSUB at
- address 00B4 with a parameter that changes its
- execution time. The proper way to analyze this
- situation is to look at the different trial runs and
- program each jump subroutine with the results.
-
-
-
-
-
- 000206 00A5 ; Variable loops
- 000207 00A5 ;
- 000208 00A5 ; Different loop times
- 000209 00A5 ;
- 000210 00A5 ; 211 min 211 max 2 stack
- 000211 00A5 ;
- 000212 00A5 VARLOOP:
- 000213 00A5 8605 LDAA #5
- 000214 00A7 BD00B4 JSR DIFSUB
- 000215 00AA 860A LDAA #10
- 000216 00AC BD00B4 JSR DIFSUB
- 000217 00AF 8614 LDAA #20
- 000218 00B1 7E00B4 JMP DIFSUB
- 000219 00B4 ;
- 000220 00B4 DIFSUB:
- 000221 00B4 4A DECA
- 000222 00B5 26FD BNE DIFSUB
- 000223 00B7 39 RTS
-
-
-
- Figure 6-8 Subroutines with Different Execution Times
-
-
-
-
-
-
-
-
-
- 55 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
- The first time DIFSUB is called it loops five times.
- Edit the conditional branch at 00B5 to Take four times.
- Now analyze the procedure DIFSUB at address 00B4. You
- should get the 30 cycles for the maximum execution time
- and zero bytes for the maximum stack depth. Edit the
- jump subroutine at address 00A7. Enter the values just
- obtained at the prompts for maximum cycle time and
- maximum stack depth.
-
- The second time DIFSUB is called it loops ten times.
- Edit the conditional branch at 00B5 to Take nine times
- and run the analysis on it again. This time you should
- get 55 cycles for the maximum execution time and still
- zero bytes for maximum stack depth. Edit the jump
- subroutine at address 00AC and enter these values.
-
- The last time DIFSUB is called it loops twenty times.
- Edit the conditional branch at 00B5 to Take nineteen
- times. Now you can analyze VARLOOP at 00A5 to get its
- correct worst case results which should be 211 cycles.
-
-
- Stack Imbalance
-
- Analyze the procedure STKIMB at address 00B8 and shown
- in Figure 6-9. A warning is displayed that says a
- mismatch of the stack occurred following the
- conditional branch at address 00B9. It says that stack
- depth when the branch is taken is -2 bytes deep and
- when the branch falls through it is only -1 bytes deep.
-
-
-
-
-
- 000224 00B8 ; Stack Imbalance
- 000225 00B8 ;
- 000226 00B8 ; Stack may become imbalanced
- 000227 00B8 ;
- 000228 00B8 ; 10 min 13 max 1 stack
- 000229 00B8 ;
- 000230 00B8 STKIMB:
- 000231 00B8 01 NOP
- 000232 00B9 2601 BNE STK010
- 000233 00BB 36 PSHA
- 000234 00BC STK010:
- 000235 00BC 39 RTS
-
-
-
- Figure 6-9 Stack Imbalance
-
-
-
- 56 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
-
-
-
-
- A close look at the algorithm shows what has happened.
- One path of the conditional branch at 00B9 will push a
- register while the other path does not. This creates
- the possibility of a stack imbalance.
-
-
- Infinite Loops
-
- Infinite loops in the program will eventually cause the
- analysis to reach an internal limitation and stop. Look
- at Figure 6-10. The procedure SIMPLOOP at address 005A
- has a conditional branch at 005E that forms a loop.
- Edit this branch and set it to Take always. This is
- done by setting the number of times to take the branch
- to zero.
-
-
-
-
-
- 000075 005A ; Simple loop
- 000076 005A ;
- 000077 005A ; A simple loop.
- 000078 005A ;
- 000079 005A ; 42 min 42 max 0 stack
- 000080 005A ;
- 000081 005A SIMPLOOP:
- 000082 005A 8605 LDAA #5
- 000083 005C SIMP010:
- 000084 005C 01 NOP
- 000085 005D 4A DECA
- 000086 005E 26FC BNE SIMP010
- 000087 0060 39 RTS
-
-
-
- Figure 6-10 Simple Loop
-
-
-
-
-
- Now do an analysis on this procedure. The analysis runs
- until an internal TimeStack limitation is reached. This
- is usually stack depth but it could be memory. Every
- time a conditional branch or jump subroutine is
- encountered in the analysis a little bit of internal
-
-
-
- 57 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
- memory and stack depth is used by TimeStack. If the
- analysis encounters a loop that runs for a long time
- this internal limitation of TimeStack may eventually be
- reached.
-
-
- Memory limitations
-
- If a memory limitation is reached, it is up to the user
- to determine if or how the program entered into a large
- or infinite loop. In general, it is not a good idea to
- try and time loops that run for more than a couple of
- hundred iterations. Also, it may be that one of the
- conditional branches has not been programmed or
- programmed incorrectly. It may be possible to narrow
- down the area that is the problem by changing the start
- and stop addresses if a large procedure is being
- analyzed.
-
- A solution to timing loops that run for a large number
- of times is to time the loop when it is taken only
- once. Then time the loop when it is taken twice.
- Calculate the difference between these results and you
- have how long each time through the loop will take.
- Multiply this value by number of iterations minus one
- through the loop and add it to the time it took for
- once through the loop. It may even be beneficial to
- document how many cycles each iteration of the loop
- takes.
-
-
- Branch Past Stop Address
-
- Analyze the procedure FWDBRA at address 002F shown in
- Figure 6-11. Use a start address of 002F and a stop
- address of 003B.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 58 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
-
-
- 000032 002F ; Forward branches
- 000033 002F ;
- 000034 002F ; only forward branches.
- 000035 002F ;
- 000036 002F ; 16 min 26 max 0 stack
- 000037 002F ;
- 000038 002F FWDBRA:
- 000039 002F 47 ASRA
- 000040 0030 2406 BCC FWD010
- 000041 0032 CE002A LDX #SIMPLE
- 000042 0035 47 ASRA
- 000043 0036 2405 BCC FWD020
- 000044 0038 FWD010:
- 000045 0038 CE002F LDX #FWDBRA
- 000046 003B 2006 BRA FWDRET
- 000047 003D FWD020:
- 000048 003D 47 ASRA
- 000049 003E 2403 BCC FWDRET
- 000050 0040 CE0044 LDX #BCKBRA
- 000051 0043 FWDRET:
- 000052 0043 39 RTS
-
-
-
- Figure 6-11 Forward Branches
-
-
-
-
-
- A warning message indicates that the branch at address
- 0036 was past the stop address. When this condition
- occurs in an analysis only the first violation is
- shown. TimeStack does not look at any portion of the
- program that is past the stop address. In this example
- the take path of the conditional branch at 0036 is
- ignored.
-
-
- Actual Stop Address
-
- Still referring to Figure 6-11, do an analysis from
- 002F to a stop address of 1234. A warning is displayed
- that indicates the specified stop address was never
- reached. It says the true stop address is 0043.
-
- TimeStack figures out what the greatest execution
- address obtained is. This does not include jump to
- subroutines. If the stop address was not FFFF and the
-
-
-
- 59 TimeStack User's Guide Chapter Six - Advanced Tutorial
-
-
-
- stop address entered is greater than what TimeStack
- thinks it should have been, this warning is displayed.
-
-
- Forcing Conditional Branches
-
- Forcing branches to take different paths to analyze
- unique scenarios may be done quickly with the use of
- F2. Use the cursor keys to move the branch to be
- modified to the top of the Special Nodes window and
- press F2. This may also be done inside the Disassembly
- window.
-
-
- Save to File
-
- It is convenient to save the analysis for printing
- using the Print menu. It is helpful to have the disk
- file name match the name of the subroutine or module
- that was analyzed.
-
-
- High Level Languages
-
- It is possible to use TimeStack with a high level
- language. A listing of the compiled output from the
- high level language compiler with the generated
- assembly statements is needed. The listing is used to
- find the start and stop addresses of procedures and to
- figure out where the conditional branches are. Some
- knowledge of how the compiler creates loop structures
- is desirable.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 60 TimeStack User's Guide Appendix A - Listing of Demo Program
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Appendix A - Listing of Demo Program
-
-
-
-
-
-
-
- 000001 0000 ; Main program
- 000002 0000 ;
- 000003 0000 ; 1424 min 1444 max 5 stack
- 000004 0000 ;
- 000005 0000 MAIN:
- 000006 0000 BD002A JSR SIMPLE
- 000007 0003 BD002F JSR FWDBRA
- 000008 0006 BD0044 JSR BCKBRA
- 000009 0009 BD005A JSR SIMPLOOP
- 000010 000C BD0061 JSR BACKLOOP
- 000011 000F BD006A JSR COMPLEX
- 000012 0012 BD0077 JSR INDJMP
- 000013 0015 BD007D JSR INSTIME
- 000014 0018 BD0081 JSR ILLEGAL
- 000015 001B BD0085 JSR OUTLOOP
- 000016 001E BD0097 JSR TWOLOOP
- 000017 0021 BD00A5 JSR VARLOOP
- 000018 0024 CE002A LDX #SIMPLE
- 000019 0027 AD00 JSR 0,X ; Uses 0 cycles 0 stack
- 000020 0029 39 RTS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 61 TimeStack User's Guide Appendix A - Listing of Demo Program
-
-
-
- 000021 002A ; Simple subroutine
- 000022 002A ;
- 000023 002A ; Contains no conditional branches.
- 000024 002A ;
- 000025 002A ; 11 min 11 max 0 stack
- 000026 002A ;
- 000027 002A SIMPLE:
- 000028 002A 40 NEGA
- 000029 002B 48 ASLA
- 000030 002C 8B05 ADDA #5
- 000031 002E 39 RTS
-
-
-
- 000032 002F ; Forward branches
- 000033 002F ;
- 000034 002F ; Contains only forward branches.
- 000035 002F ;
- 000036 002F ; 16 min 26 max 0 stack
- 000037 002F ;
- 000038 002F FWDBRA:
- 000039 002F 47 ASRA
- 000040 0030 2406 BCC FWD010
- 000041 0032 CE002A LDX #SIMPLE
- 000042 0035 47 ASRA
- 000043 0036 2405 BCC FWD020
- 000044 0038 FWD010:
- 000045 0038 CE002F LDX #FWDBRA
- 000046 003B 2006 BRA FWDRET
- 000047 003D FWD020:
- 000048 003D 47 ASRA
- 000049 003E 2403 BCC FWDRET
- 000050 0040 CE0044 LDX #BCKBRA
- 000051 0043 FWDRET:
- 000052 0043 39 RTS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 62 TimeStack User's Guide Appendix A - Listing of Demo Program
-
-
-
- 000053 0044 ; Backward normal branches
- 000054 0044 ;
- 000055 0044 ; Only backward normal branches.
- 000056 0044 ;
- 000057 0044 ; 16 min 26 max 0 stack
- 000058 0044 ;
- 000059 0044 BCKBRA:
- 000060 0044 47 ASRA
- 000061 0045 2407 BCC BCK010
- 000062 0047 CE002A LDX #SIMPLE
- 000063 004A 47 ASRA
- 000064 004B 2406 BCC BCK020
- 000065 004D BCKRET:
- 000066 004D 39 RTS
- 000067 004E BCK010:
- 000068 004E CE002F LDX #FWDBRA
- 000069 0051 20FA BRA BCKRET
- 000070 0053 BCK020:
- 000071 0053 47 ASRA
- 000072 0054 24F7 BCC BCKRET
- 000073 0056 CE0044 LDX #BCKBRA
- 000074 0059 39 RTS
-
-
-
- 000075 005A ; Simple loop
- 000076 005A ;
- 000077 005A ; A simple loop.
- 000078 005A ;
- 000079 005A ; 42 min 42 max 0 stack
- 000080 005A ;
- 000081 005A SIMPLOOP:
- 000082 005A 8605 LDAA #5
- 000083 005C SIMP010:
- 000084 005C 01 NOP
- 000085 005D 4A DECA
- 000086 005E 26FC BNE SIMP010 ; TAKE 4
- 000087 0060 39 RTS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 63 TimeStack User's Guide Appendix A - Listing of Demo Program
-
-
-
- 000088 0061 ; Loop with backwards branch
- 000089 0061 ;
- 000090 0061 ; Simple loop with a normal backwards
- 000091 0061 ; branch that terminates in middle.
- 000092 0061 ;
- 000093 0061 ; 62 min 62 max 0 stack
- 000094 0061 ;
- 000095 0061 BACKLOOP:
- 000096 0061 8606 LDAA #6
- 000097 0063 BACK010:
- 000098 0063 4A DECA
- 000099 0064 2703 BEQ BACKRET ; FALL 5
- 000100 0066 01 NOP
- 000101 0067 20FA BRA BACK010
- 000102 0069 BACKRET:
- 000103 0069 39 RTS
-
-
-
- 000104 006A ; Complex loop
- 000105 006A ;
- 000106 006A ; A loop that will trigger the
- 000107 006A ; complex loop message.
- 000108 006A ;
- 000109 006A ; 43 min 43 max 2 stack
- 000110 006A ;
- 000111 006A COMPLEX:
- 000112 006A 8605 LDAA #5
- 000113 006C COMPL1:
- 000114 006C 4A DECA
- 000115 006D 2704 BEQ COMPX1 ; FALL 2
- 000116 006F 4A DECA
- 000117 0070 26FA BNE COMPL1 ; TAKE 2
- 000118 0072 39 RTS
- 000119 0073 COMPX1:
- 000120 0073 BD0076 JSR COMPX2
- 000121 0076 COMPX2:
- 000122 0076 39 RTS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 64 TimeStack User's Guide Appendix A - Listing of Demo Program
-
-
-
- 000123 0077 ; Indirect jump test
- 000124 0077 ;
- 000125 0077 ; Indirect jump that goes some
- 000126 0077 ; place and one that returns.
- 000127 0077 ;
- 000128 0077 ; 11 min 11 max 0 stack
- 000129 0077 ;
- 000130 0077 INDJMP:
- 000131 0077 6E00 JMP 0,X ; Destination JMPRET
- 000132 0079 01 NOP
- 000133 007A JMPRET:
- 000134 007A 38 PULX ; Pull return address
- 000135 007B 6E00 JMP 0,X ; Indirect jump as RTS
-
-
-
- 000136 007D ; Instruction not timeable
- 000137 007D ;
- 000138 007D ; This can not be timed.
- 000139 007D ;
- 000140 007D ; 8 min 8 max 0 stack
- 000141 007D ;
- 000142 007D INSTIME:
- 000143 007D 2701 BEQ INST010 ; May be skipped
- 000144 007F CF STOP ; Stop instruction
- 000145 0080 INST010:
- 000146 0080 39 RTS
-
-
-
- 000147 0081 ; Illegal instructions
- 000148 0081 ;
- 000149 0081 ; These are illegal in demo.
- 000150 0081 ;
- 000151 0081 ; 8 min 8 max 0 stack
- 000152 0081 ;
- 000153 0081 ILLEGAL:
- 000154 0081 2701 BEQ ILL010 ; May be skipped
- 000155 0083 3D MUL
- 000156 0084 ILL010:
- 000157 0084 39 RTS
-
-
-
-
-
-
-
-
-
-
-
-
-
- 65 TimeStack User's Guide Appendix A - Listing of Demo Program
-
-
-
- 000158 0085 ; Outer loop
- 000159 0085 ;
- 000160 0085 ; Outer loop of nested loops.
- 000161 0085 ;
- 000162 0085 ; 482 min 482 max 3 stack
- 000163 0085 ;
- 000164 0085 OUTLOOP:
- 000165 0085 8605 LDAA #5
- 000166 0087 OUT010:
- 000167 0087 36 PSHA
- 000168 0088 BD0090 JSR INLOOP
- 000169 008B 32 PULA
- 000170 008C 4A DECA
- 000171 008D 26F8 BNE OUT010 ; TAKE 4
- 000172 008F 39 RTS
-
-
-
- 000173 0090 ; Inner loop
- 000174 0090 ;
- 000175 0090 ; Inner loop of nested loops.
- 000176 0090 ;
- 000177 0090 ; 77 min 77 max 0 stack
- 000178 0090 ;
- 000179 0090 INLOOP:
- 000180 0090 860A LDAA #10
- 000181 0092 IN010:
- 000182 0092 01 NOP
- 000183 0093 4A DECA
- 000184 0094 26FC BNE IN010 ; TAKE 9
- 000185 0096 39 RTS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 66 TimeStack User's Guide Appendix A - Listing of Demo Program
-
-
-
- 000186 0097 ; Two loops
- 000187 0097 ;
- 000188 0097 ; Two loops in one.
- 000189 0097 ;
- 000190 0097 ; 436 min 436 max 0 stack
- 000191 0097 ;
- 000192 0097 TWOLOOP:
- 000193 0097 CE0005 LDX #5
- 000194 009A TWO010:
- 000195 009A 01 NOP
- 000196 009B 860A LDAA #10
- 000197 009D TWO020:
- 000198 009D 01 NOP
- 000199 009E 4A DECA
- 000200 009F 26FC BNE TWO020 ; TAKE 49
- 000201 00A1 ;
- 000202 00A1 09 DEX
- 000203 00A2 26F6 BNE TWO010 ; TAKE 4
- 000204 00A4 ;
- 000205 00A4 39 RTS
-
-
-
- 000206 00A5 ; Variable loops
- 000207 00A5 ;
- 000208 00A5 ; Different loop times
- 000209 00A5 ;
- 000210 00A5 ; 211 min 211 max 2 stack
- 000211 00A5 ;
- 000212 00A5 VARLOOP:
- 000213 00A5 8605 LDAA #5
- 000214 00A7 BD00B4 JSR DIFSUB ; 30 cycles
- 000215 00AA 860A LDAA #10
- 000216 00AC BD00B4 JSR DIFSUB ; 55 cycles
- 000217 00AF 8614 LDAA #20
- 000218 00B1 7E00B4 JMP DIFSUB
- 000219 00B4 ;
- 000220 00B4 DIFSUB:
- 000221 00B4 4A DECA
- 000222 00B5 26FD BNE DIFSUB ; TAKE 19
- 000223 00B7 39 RTS
-
-
-
-
-
-
-
-
-
-
-
-
-
- 67 TimeStack User's Guide Appendix A - Listing of Demo Program
-
-
-
- 000224 00B8 ; Stack Imbalance
- 000225 00B8 ;
- 000226 00B8 ; Stack may become imbalanced
- 000227 00B8 ;
- 000228 00B8 ; 10 min 13 max 1 stack
- 000229 00B8 ;
- 000230 00B8 STKIMB:
- 000231 00B8 01 NOP
- 000232 00B9 2601 BNE STK010
- 000233 00BB 36 PSHA
- 000234 00BC STK010:
- 000235 00BC 39 RTS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 68 TimeStack User's Guide Appendix B - Warning and Error Messages
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Appendix B - Warning and Error Messages
-
-
-
-
-
-
-
-
- Warning Messages
-
- Warning messages indicate that everything is OK but
- that there may be something to watch out for or
- additional information is needed.
-
- A mismatch of the stack occurred
-
- A conditional branch has two possible paths, the path
- that results when the branch is taken and when it falls
- through. This indicates that the stack depth is
- different depending on which path is analyzed. It may
- be possible for the stack to become unbalanced
- depending on how the program works.
-
- Backwards branch or jump at address %x
-
- If a backwards branch or jump is encountered it is
- possible for a loop to exist. This gives the user the
- opportunity to review the program at this point to see
- if a loop is in progress.
-
- Branch at address %x was past the stop address
-
- A branch encountered during the analysis branched past
- the given stop address. The analysis results may not be
- valid because this branch has not been fully explored.
- It may also indicate that the stop address entered
- should be higher to do a full analysis.
-
-
-
-
- 69 TimeStack User's Guide Appendix B - Warning and Error Messages
-
-
-
- Indirect jump at address %x needs a destination
-
- The address that an indirect jump goes to is needed to
- complete the analysis.
-
- Indirect jump subroutine at address %x needs cycle time
- and stack depth
-
- An indirect jump subroutine must have the maximum
- number of clock cycles and maximum stack depth used by
- the intended subroutine. This is more versatile than
- entering an address to jump to.
-
- The specified stop address %x was never reached
-
- The stop address entered was not encountered during the
- analysis. This usually happens when the stop address
- entered is less than the start address. Another
- possibility is that a return from subroutine was
- encountered before the stop address entered and the
- logic flow did not allow it to reach the given stop
- address.
-
-
- Error Messages
-
- An error message terminates the function being done. It
- means some corrective action should be taken to fix the
- problem.
-
- Error list file is version %x
-
- The special node file being read in has a version
- number that does not match this version of TimeStack.
-
- Error opening configuration file %s for reading
-
- There is an error opening the given file for reading
- and writing.
-
- Error opening configuration file %s for writing
-
- The configuration file has an error while opening it
- for writing.
-
- Error opening print file %s for writing
-
- There is an error opening the given file for writing.
-
-
-
-
-
-
- 70 TimeStack User's Guide Appendix B - Warning and Error Messages
-
-
-
- Error reading configuration file header
-
- The first line of information in the configuration file
- is bad. This usually means the file is not a valid
- configuration file. Check the file name entered or the
- configuration file being used.
-
- Error with size of configuration file
-
- The configuration file is too large to be valid. Check
- to see that the given file is actually a configuration
- file.
-
- Error with the configuration version number
-
- The configuration file has a version that is greater
- then the program reading it. Use the correct version of
- TimeStack that matches the configuration file.
-
- Fatal internal error...
-
- An error occurred in the internal logic of TimeStack.
- This error should not occur in practice but is listed
- here for completeness. If this error persists, write
- down the details and contact BE, Inc.
-
- File error opening %s
-
- The file indicated was not found for the reason
- specified.
-
- Illegal opcode %x at address %x
-
- The opcode at this address is not a valid instruction
- for the current processor type. This might happen if a
- hex file for another processor is loaded, the wrong
- processor type was chosen, or an incorrect start
- address has been entered.
-
- One or both of the help files...
-
- One or both of the indicated help files is missing or
- can not be located by the TimeStack program. These
- files are first looked for in the current drive and
- directory. If they are not found there, each directory
- specified in the PATH environment variable is searched
- in turn until the files are found or the paths are
- exhausted.
-
-
-
-
-
-
- 71 TimeStack User's Guide Appendix B - Warning and Error Messages
-
-
-
- The address %x is not an address loaded
-
- The address encountered is not an address that was
- loaded from the hex file. Unless it is loaded from the
- hex file, the contents are undefined.
-
- The analysis is limited by the amount of free memory
- remaining
-
- The analysis is limited by the amount of memory in the
- system. Each jump subroutine and conditional branch
- encountered requires a little bit more. This usually
- means an infinite loop has been encountered or it may
- mean a loop that occurs more times than TimeStack can
- handle.
-
- The analysis is limited by the stack depth
-
- The analysis is limited by the amount of program stack
- in the system. This can not be changed by the user.
- Each jump subroutine and conditional branch encountered
- requires a little bit more. This usually means an
- infinite loop has been encountered. It may also mean a
- loop has been set up and is taken more times than
- TimeStack can handle.
-
- The branch at address %x is involved in a difficult
- structure
-
- Some loop structures are too difficult to analyze
- without some assistance. This is the branch that needs
- to be set for the loop in question.
-
- The file %s does not seem to be Motorola or Intel Hex
- format
-
- The letter S or a colon was not found to be the first
- character in the first line of the file.
-
- The file %s has a bad checksum
-
- The checksum in one of the records in the hex file is
- incorrect.
-
- The file %s had no hex information
-
- This file was scanned and identified as a Motorola or
- Intel hex file but no hex data was found after that. It
- probably is not a hex file at all.
-
-
-
-
-
- 72 TimeStack User's Guide Appendix B - Warning and Error Messages
-
-
-
- The number of steps to execute a series of
- instructions...
-
- A series of instructions with no conditional branch to
- divide it up has been encountered. This is probably an
- infinite loop.
-
- The opcode %x at address %x is not able to be analyzed
- for time
-
- The opcode at this address can not be logically
- analyzed. This is usually an instruction like halt the
- processor or wait for an interrupt to occur.
-
- The processor type found in the configuration file...
-
- The processor type found in the configuration file does
- not match any of the processors that this version of
- the TimeStack handles.
-
- The processor type information was not found...
-
- The configuration file must indicate what type of
- processor TimeStack should use. This information is
- missing.
-
- Virtual file error writing %s
-
- There was a problem writing to the temporary file
- created on the disk. The most likely reason is that the
- disk was full. The temporary files need at least 50K of
- space when TimeStack runs.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 73 TimeStack User's Guide Appendix C - Key Summary
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Appendix C - Key Summary
-
-
-
-
-
-
-
- F1 Obtains context sensitive on-line
- help.
-
- F2 Edit address on top line of selected
- window.
-
- F3 Select next window.
-
- F4 Select previous window.
-
- F5 Reserved for future use.
-
- F6 Move and adjust selected window.
-
- ALT-A Analysis
-
- ALT-C Clear
-
- ALT-D Disasm
-
- ALT-E Edit
-
- ALT-F File
-
- ALT-L File | Load
-
- ALT-O Options
-
- ALT-P Print
-
- ALT-Q Quit
-
-
-
- 74 TimeStack User's Guide Appendix C - Key Summary
-
-
-
-
- ALT-R File | Restore
-
- ALT-S File | Save
-
- ALT-1 - ALT-6 Select the window with that number.
-
- Home Move to beginning of list in window or
- beginning of line.
-
- CTRL-Home Move to beginning of list in window.
-
- End Move to end of list in window or end
- of line.
-
- CTRL-End Move to end of list in window.
-
- Pg Up Move up one window's worth.
-
- Pg Dn Move down one window's worth.
-
- Cur Up Move up one line in window or pull
- down menu.
-
- CTRL-Pg Up Move up one line in window.
-
- Cur Dn Move down one line in window or pull
- down menu.
-
- CTRL-Pg Dn Move down one line in window.
-
- Ins Toggles insert mode when entering
- data.
-
- Del Deletes the character at the cursor
- position.
-
- Backspace Deletes the character just in front of
- the cursor.
-
- Cur Left Moves the cursor left one character.
-
- Cur Right Moves the cursor right one character.
-
-
-
-
-
-
-
-
-
-
-
- 75 TimeStack User's Guide Appendix D - Processor Specifics
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Appendix D - Processor Specifics
-
-
-
-
-
-
-
-
- TSDEMO
-
- The processor used for the demo program is based on a
- subset of the 68HC11 processor.
-
- The default clock divisor value is four.
-
- The following opcodes have been removed:
-
- * any instruction that requires a PREBYTE
-
- * all special instructions such as MUL, FDIV, IDIV
-
- * everything that operates on registers B, D, or Y
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 76 TimeStack User's Guide Appendix D - Processor Specifics
-
-
-
-
-
- TS6811
-
- The default clock divisor value is four.
-
- 6800
-
- The processors that fall in this category are:
- 6800.
-
- 6801
-
- The processors that fall in this category are:
- 6801, 6801U4, 68701, 68701U4.
-
- 6802
-
- This processor is identical to the 6800 for the purpose
- of analysis. It has a separate entry for labeling
- purposes.
-
- The processors included in this category are:
- 6802.
-
- 6803
-
- These processors are identical to the 6801 for the
- purpose of analysis. It has a separate entry for
- labeling purposes.
-
- The processors that fall in this category are:
- 6803, 6803U4.
-
- 68HC11
-
- The processors that fall in this category are:
- 68HC11A0, 68HC11A1, 68HC11A7, 68HC11A8,
- 68HC11D0, 68HC11D3, 68HC11E0, 68HC11E1,
- 68HC11E2, 68HC11E8, 68HC11E9, 68HC11F1,
- 68HC11L0, 68HC11L1, 68HC11L5, 68HC11L6,
- 68HC711D3, 68HC711E9, 68HC711K4, 68HC711J6,
- 68HC711L6.
-
-
-
-
-
-
-
-
-
-
-
- 77 TimeStack User's Guide Appendix D - Processor Specifics
-
-
-
-
-
- TS6805
-
- There are a very large number of different 6805
- variations but for timing purposes they fall into three
- categories. These are HMOS, HCMOS, and CMOS. If a
- specific processor has not been mentioned it should be
- obvious where it should be placed by looking at its
- number.
-
- 6805 HMOS
-
- The default clock divisor value is four.
-
- The HMOS processors that fall in this category are:
- 6805P2, 6805P6, 6805R2, 6805R3, 6805R6,
- 6805S2, 6805S3, 6805U2, 6805U3, 68705P3,
- 68705P5, 68705R3, 68705R5, 68705S3, 68705U3,
- 68705U5.
-
- 68HC05 HCMOS
-
- The default clock divisor value is two.
-
- The HCMOS processors that fall in this category are:
- 68HC05A6, 68HC05B4, 68HC05B6, 68HC05C2,
- 68HC05C3, 68HC05C4, 68HC05C5, 68HC05C8,
- 68HC05C9, 68HC05D9, 68HC05E0, 68HC05E1,
- 68HC05J1, 68HC05L6, 68HC05L7, 68HC05L9,
- 68HC05M4, 68HC05P1, 68HC05P4, 68HC05P7,
- 68HC05P8, 68HC05P9, 68HC05SC11, 68HC05SC21,
- 68HC05T1, 68HC05T2, 68HC05T7, 68HCL05C4,
- 68HCL05C8, 68HSC05C4, 68HSC05C8, 68HC705B5,
- 68HC705C8, 68HC705J2, 68HC705P9, 68HC805B6,
- 68HC805C4.
-
- 146805 CMOS
-
- The default clock divisor value is four.
-
- The CMOS processors that fall in this category are:
- 146805E2, 146805F2, 146805G2.
-
-
-
-
-
-
-
-
-
-
-
- 78 TimeStack User's Guide Appendix D - Processor Specifics
-
-
-
-
-
- TS8051
-
- The default clock divisor value is twelve.
-
- The disassembler for this family of processors will
- show the internal register names and bits.
-
- 8051
-
- The processors that fall in this category are:
- 8051, 8052, 8751.
-
- 8031
-
- This processor is identical to the 8051 for the purpose
- of analysis. It has a separate entry for labeling
- purposes.
-
- The processors that fall in this category are:
- 8031, 8032.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 79 TimeStack User's Guide Appendix D - Processor Specifics
-
-
-
-
-
- TS8048
-
- The 8048 processors handle extended program memory in a
- special way. For programs of 2K bytes or less, program
- memory may be addressed in a conventional manner.
- Address above 2K can be reached by executing a program
- memory bank switch instruction (SEL MB0 or SEL MB1)
- followed by a branch instruction such as JMP or CALL. A
- bit called DBF (memory bank flip-flop) contains the
- setting of the last SEL MB0 or SEL MB1 instruction. All
- JMP's and CALL's use this bit to determine which memory
- bank (lower 2K or upper 2K) to execute from.
-
- The problem is when the analysis begins it is not known
- what state the DBF bit should be set to. This is
- handled by initially setting the DBF bit to match the
- memory bank of the start address given in the analysis.
-
- Another minor issue is that of indirect jumps. The
- range is limited to 256 bytes but the program will
- allow a 16-bit address to be entered.
-
- The stack depth of the 8048 processors allows a nesting
- level of eight. After that the stack pointer wraps
- around and the oldest return address is lost. The
- TimeStack analysis does not detect this.
-
- 8048 family
-
- The default clock divisor value is fifteen.
-
- The processors that fall in this category are:
- 8035, 8039, 8040, 8048, 8049, 8050, 8748, 8749.
-
- 8021/8020
-
- The default clock divisor value is thirty.
-
- The processors that fall in this category are:
- 8021, 8020.
-
- 8022
-
- The default clock divisor value is thirty.
-
- The processors that fall in this category are:
- 8022.
-
-
-
-
-
- 80 TimeStack User's Guide Index
-
-
-
- Index different processors, 27
-
- Bytes
- memory usage, 45
-
-
- - 6 - - C -
-
- 6800, 77 Clear, 16
-
- 6805, 78 Clock
- changing clock divisor, 17
- 6811, 77 changing rate, 16
- cycles, 45
- demo program, 37
- - 8 -
- Command line
- 8048, 80 syntax, 7
-
- 8051, 79 Comment
- added to print, 18
-
- - A - Complex loops, 48
-
- Addresses, see also Start and Concepts
- stop timing, 31
- entering, 12
- Conditional branch
- Analysis, 14, see also Timing description, 31
- demo program, 38 different processors, 27
- window, 21 edit, 15
- fall, 32
- Assembly language, see Source forcing, 60
- code inside subroutine, 39
- normal, 32
- Autoexec.bat, see take, 31
- Configuration
- Configuration
- Automatically save autoexec.bat, 7
- demo configuration, 37 automatically save, 17
- demo program, 37
- file, 14, 29
- - B - get, 14
- put, 14
- BE, Inc. system requirements, 6
- how to contact, 5
- Cycles
- Branch clock, 45
- past stop address, 58
-
- Branch relative
-
-
-
- 81 TimeStack User's Guide Index
-
-
-
- - D - F5, Reserved for future
- use, 22
- Demo program F6 - Move or size window,
- configuration, 37 23
- invoking, 36
- limitations, 27
- processor specifics, 76 - H -
-
- DEMO.HEX, 36 Help
- on-line, 24
- Disasm, 16
- window, 20 Hex file, 13
- description, 27
- Intel, 28
- - E - load, 13
- load DEMO.HEX, 37
- Edit, 15 Motorola, 28
- conditional branch, 15 possible errors, 29
- jump indirect, 16
- jump to subroutine, 15 High level languages, 60
-
- Error messages, 70 Hot keys
- Alt-1 - Alt-6, Select
- window, 23
- - F - Alt-A, Analysis, 14, 23
- Alt-C, Clear, 16, 23
- Fall, see Conditional branch Alt-D, Disasm, 16, 23
- Alt-E, Edit, 15, 23
- File, 13, see also Node file Alt-F, File, 13, 23
- get, 14 Alt-L, Load, 13, 23
- load, 13 Alt-O, Options, 16, 23
- put, 14 Alt-P, Print, 17, 23
- restore, 13 Alt-Q, Quit, 19, 23
- save, 13 Alt-R, Restore, 13, 23
- Alt-S, Save, 13, 23
- Filenames
- entering, 11
- - I -
- Files, see also Configuration,
- see also Temporary files Illegal instructions, 51
-
- Forcing Indirect jump, see also Jump
- conditional branches, 60 indirect, 50
-
- Function keys Infinite loops, 57
- F1, Help, 22
- F2, Edit top item, 22, 60 Information
- F3, Select next window, 22 get summary, 37
- F4, Select previous window,
- 22 Installation
- performing, 6
-
-
-
- 82 TimeStack User's Guide Index
-
-
-
- Instructions - L -
- illegal, 51
- untimeable, 51 Languages, 60
-
- Intel Limitations
- 8048, 80 demo program, 27
- 8051, 79 memory, 58
- hex file, 28
- Listing
- description, 29
- - J - have it ready, 45
- looking it over, 36
- Jump
- different processors, 27 Loading
- DEMO.HEX, 37
- Jump indirect, 35 TimeStack, 8
- as return from subroutine,
- 35 Loops
- different processors, 27 complex, 48
- edit, 16 description, 32
- exit at bottom, 33, 41
- Jump to subroutine exit in middle, 33, 42
- different processors, 27 infinite, 57
- edit, 15 inside other loops, 54
- inside subroutines, 52
- nested, 52
- - K -
-
- Key - M -
- summary, 74
- Maximum execution
- Keys, see also Function keys, strategy, 45
- see also Hot keys window, 21
- Backspace, 24
- Ctrl-End, 24 Memory
- Ctrl-Home, 23 limitations, 58
- Ctrl-Pg Dn, 24
- Ctrl-Pg Up, 24 Menus, see also individual
- Cur Dn, 24 menu names
- Cur Left, 24 entering filenames, 11
- Cur Right, 24 entering numbers, 12
- Cur Up, 24 operation of, 10
- Del, 24 screen layout, 9
- End, 23 selections, 13
- Home, 23 status line, 11
- Ins, 24
- Pg Dn, 24 Minimum execution
- Pg Up, 24 strategy, 45
- window, 22
-
- Mnemonics
-
-
-
- 83 TimeStack User's Guide Index
-
-
-
- differences, 26 path to printer, 18
- results, 43, 60
- Motorola
- 6800, 77 Processor
- 6805, 78 6800, 77
- 6811, 77 6805, 78
- hex file, 28 6811, 77
- 8048, 80
- 8051, 79
- - N - demo program type, 37, 76
- display of type, 16
- Node file, 13
- automatically save, 17, 19 Program listing, see Listing
- description, 30
- restore, 13 Program loops, see Loops
- save, 13
- Program names, 7
- Nodes
- clearing, 16
- editing, 15 - Q -
- window, 20
- Quit, 19, 44
- Normal, see Conditional branch
-
- Numbers - R -
- bases, 12
- entering, 12 README, 6
- prefixes and postfixes, 12
- Registration
- user registration, 5
- - O -
- Relative branch, see Branch
- Options, 16 relative
- clock rate, 16
- config, 17 Return from subroutine, see
- divisor for clock, 17 also Subroutine
- get, 17 different processors, 27
- node, 17 stop address, 15
- type of processor, 16 using jump indirect, 35
-
- Running
- - P - TimeStack, 8
-
- Prefixes and Postfixes
- entering numbers, 12 - S -
-
- Print, 17 Save
- comment, 18 results to file, 60
- disasm to file, 18
- disasm to printer, 18 Screen, see Menus or Windows
- path to file, 18
-
-
-
- 84 TimeStack User's Guide Index
-
-
-
- Simulator - T -
- comparison with TimeStack,
- 2 Take, see Conditional branch
- definition, 2
- Temporary files, 30
- Source code
- format, 25 TimeStack
- mnemonic differences, 26 benefits of using, 1
- comparison with simulator,
- Special nodes 2
- window, 20 loading and running, 8
- program names, 7
- Stack depth tutorial, 36
- description, 35
- imbalance, 56 Timing, see also Loops
- strategy, 45 concepts, 31
- window, 22 indirect jump, 50
- multiple paths, 47
- Start address strategy, 45
- examples, 39 subroutines, 55
-
- Start and stop TPDEMO, 36, 48
- description, 30
- entering, 14
- - U -
- Status line, 11
- User registration, see
- Stop address Registration
- actual, 59
- branch past, 58
- examples, 39 - W -
-
- Strategy, see Timing Warning messages, 69
-
- Subroutines Windows
- conditional branches, 39 analysis results, 21
- description, 34 description, 19
- different execution times, disassembly, 20
- 55 display of subroutines, 20
- entering execution time, 34 maximum execution, 21
- entering stack depth, 34 minimum execution, 22
- indirect, 34 moving and sizing, 19
- loops inside of, 52 screen layout, 9
- return from, 34 selecting, 19
- simple timing, 38 special nodes, 20
- stack depth, 22
- Syntax status line, 11
- command line, 7
-
- System
- requirements, 6
-
-
-
- 85
-